程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Asp.net 2.0的TreeView客戶端個性化控制

Asp.net 2.0的TreeView客戶端個性化控制

編輯:關於.NET

 ASP.Net 2.0 的 TreeVIEw 控件功能雖說強大,但其客戶端控制很遜色,本文將講解 TreeVIEw 的客戶端實現原理,並實現兩個個性化操作:

  (1) 節點的全部打開和關閉;

  TreeNode Expand(or Collapse) all

  (2) 只打開一個節點(關閉其他兄弟節點)。

  just one node expanded(when a clIEnt expand one node all other will collaps)

  用記事本打開頁面源代碼,可以找到一下兩個腳本引用:

<script src="/WebUI/WebResource.axd?d=RAQeBcDUNuP9iuS8q3tNEw2&amp;t=633300220640000000" type="text/Javascript"></script> 
<script src="/WebUI/WebResource.axd?d=JuTdJhq3NM8Jq_RhssAkEg2&amp;t=633300220640000000" type="text/Javascript"></script>

  將"/WebUI/WebResource.axd?d=RAQeBcDUNuP9iuS8q3tNEw2&t=633300220640000000"拷到地址欄尾,下載腳本,並以 .JS 命名,另一個同樣操作。分析第二個腳本文件,可以看到TreeView的很多客戶端函數,其中關鍵的一個 TreeVIEw_ToggleNode 就是客戶端點擊時觸發的事件。

  要想做個性化的操作,就得從 TreeVIEw_ToggleNode 事件下手。我們無法更改.Net封裝好的腳本,只有“重寫”。所謂的重寫就是在原來的函數之後添加一個同名函數(因為JS對於同名函數只調用最後一個)。

  TreeVIEw_ToggleNode 的原函數:

  function TreeVIEw_ToggleNode(data, index, node, lineType, children) { 
  var img = node.childNodes[0]; 
  var newExpandState; 
  try { 
  if (children.style.display == "none") { 
  children.style.display = "block"; 
  newExpandState = "e"; 
  if ((typeof(img) != "undefined") && (img != null)) { 
  if (lineType == "l") { 
  img.src = data.images[15]; 
  } 
  else if (lineType == "t") { 
  img.src = data.images[12]; 
  } 
  else if (lineType == "-") { 
  img.src = data.images[18]; 
  } 
  else { 
  img.src = data.images[5]; 
  } 
  img.alt = data.collapseToolTip.replace(/\{0\}/, TreeVIEw_GetNodeText(node)); 
  } 
  } 
  else { 
  children.style.display = "none"; 
  newExpandState = "c"; 
  if ((typeof(img) != "undefined") && (img != null)) { 
  if (lineType == "l") { 
  img.src = data.images[14]; 
  } 
  else if (lineType == "t") { 
  img.src = data.images[11]; 
  } 
  else if (lineType == "-") { 
  img.src = data.images[17]; 
  } 
  else { 
  img.src = data.images[4]; 
  } 
  img.alt = data.expandToolTip.replace(/\{0\}/, TreeVIEw_GetNodeText(node)); 
  } 
  } 
  } 
  catch(e) {} 
  data.expandState.value = data.expandState.value.substring(0, index) + newExpandState + data.expandState.value.slice(index + 1); 
  }

  1. 節點的全部打開和關閉:

<html XMLns="http://www.w3.org/1999/xHtml"> 
<head runat="server"> 
    <title>LeftMenu_Tree</title> 
</head> 
<body bgcolor="#DDEDFD"> 
    <form id="form1" runat="server"> 
        <a href="Javascript:TreeviewExpandCollapseAll('<%=TreeView1.ClIEntID%>', true)">Expand 
            All</a> <a href="Javascript:TreeviewExpandCollapseAll('<%=TreeView1.ClIEntID%>', false)"> 
                Collapse All</a> 
        <ASP:TreeView ID="TreeVIEw1" SkinID="tvClass" runat="server" ShowLines="true" NodeWrap="false"> 
        </ASP:TreeVIEw> 
    </form> 
</body> 
</Html> 

<script language="Javascript"> 
//----------------------------------------------------------------------------- 
function $(s){return document.getElementById(s);} 
function isNull(_sVal){return (_sVal == "" || _sVal == null || _sVal == "undefined");} 

function TreeviewExpandCollapseAll(treeVIEwId, expandAll) 

    var displayState = (expandAll == true ? "none" : "block"); 
    var treeView = $(treeVIEwId); 
    if(treeVIEw) 
    { 
        var treeLinks = treeVIEw.getElementsByTagName("a"); 
        var nodeCount = treeLinks.length; 
        var flag = true; 
        for(i=0;i<nodeCount;i++) 
        { 
            if(treeLinks[i].firstChild.tagName) 
            { 
                if(treeLinks[i].firstChild.tagName.toLowerCase() == "img") 
                { 
                    var node = treeLinks[i]; 
                    var level = parseInt(node.id.substr(node.id.length - 1),10); 
                    var childContainer = GetParentByTagName("table", node).nextSibling; 
                    if(!isNull(childContainer)) 
                    { 
                        if(flag) 
                        { 
                            if(childContainer.style.display == displayState) 
                            { 
                                TreeView_ToggleNode(eval(treeVIEwId +"_Data"),level,node,'r',childContainer); 
                            } 
                            flag = false; 
                        } 
                        else 
                        { 
                            if(childContainer.style.display == displayState) 
                            { 
                                TreeView_ToggleNode(eval(treeVIEwId +"_Data"),level,node,'l',childContainer); 
                            } 
                        } 
                    } 
                } 
            } 
        }//for loop ends 
    } 


function GetParentByTagName(parentTagName, childElementObj) 

    var parent = childElementObj.parentNode; 
    while(parent.tagName.toLowerCase() != parentTagName.toLowerCase())
    { 
        parent = parent.parentNode; 
    } 
    return parent; 

//----------------------------------------------------------------------------- 
</script>

2. 只打開一個節點(關閉其他兄弟節點)

<html XMLns="http://www.w3.org/1999/xHtml"> 
<head runat="server"> 
    <title>LeftMenu_Tree</title> 
</head> 
<body bgcolor="#DDEDFD"> 
    <form id="form1" runat="server"> 
        <a href="Javascript:TreeviewExpandCollapseAll('<%=TreeView1.ClIEntID%>', true)">Expand 
            All</a> , <a href="Javascript:TreeviewExpandCollapseAll('<%=TreeView1.ClIEntID%>', false)"> 
                Collapse All</a> 
        <ASP:TreeView ID="TreeVIEw1" SkinID="tvClass" runat="server" ShowLines="true" NodeWrap="false"> 
        </ASP:TreeVIEw> 
    </form> 
</body> 
</Html> 

<script language="Javascript"> 
//2. 只打開一個節點(關閉其他兄弟節點)------------------------------------------ 
function TreeVIEw_ToggleNode(data, index, node, lineType, children)  

    var img = node.childNodes[0]; 
    var newExpandState; 
    try { 
        //***折疊兄弟節點------------------------ 
        CollapseBrothers(data,children); 
        //--------------------------------------- 
             
        if (children.style.display == "none")  
        { 
            children.style.display = "block"; 
            newExpandState = "e"; 
            if ((typeof(img) != "undefined") && (img != null))  
            { 
                if (lineType == "l")  
                { 
                    img.src = data.images[15]; 
                } 
                else if (lineType == "t")  
                { 
                    img.src = data.images[12]; 
                } 
                else if (lineType == "-")  
                { 
                    img.src = data.images[18]; 
                } 
                else  
                { 
                    img.src = data.images[5]; 
                } 
                img.alt = data.collapseToolTip.replace(/\{0\}/, TreeVIEw_GetNodeText(node)); 
            } 
        } 
        else  
        { 
            children.style.display = "none"; 
            newExpandState = "c"; 
            if ((typeof(img) != "undefined") && (img != null))  
            { 
                if (lineType == "l")  
                { 
                    img.src = data.images[14]; 
                } 
                else if (lineType == "t")  
                { 
                    img.src = data.images[11]; 
                } 
                else if (lineType == "-")  
                { 
                    img.src = data.images[17]; 
                } 
                else  
                { 
                    img.src = data.images[4]; 
                } 
                img.alt = data.expandToolTip.replace(/\{0\}/, TreeVIEw_GetNodeText(node)); 
            } 
        } 
    } 
    catch(e) {} 
    data.expandState.value =  data.expandState.value.substring(0, index) + newExpandState + data.expandState.value.slice(index + 1); 


//折疊兄弟節點 
function CollapseBrothers(data,childContainer) 

    var parent = childContainer.parentNode;    
    for(i=0; i< parent.childNodes.length; i++) 
    { 
        if(parent.childNodes[i].tagName.toLowerCase() =="div") 
        { 
            if(parent.childNodes[i].id != childContainer.id) 
            { 
                parent.childNodes[i].style.display = "none" 
            } 
        } 
        else if(parent.childNodes[i].tagName.toLowerCase() =="table") 
        { 
            var treeLinks = parent.childNodes[i].getElementsByTagName("a");             
            if(treeLinks.length > 2) 
            { 
                var j=0; 
                if(treeLinks[j].firstChild.tagName) 
                { 
                    if(treeLinks[j].firstChild.tagName.toLowerCase() == "img") 
                    { 
                        var img = treeLinks[j].firstChild; 
                        if(i==0)  
                            img.src = data.images[8]; 
                        else if(i==parent.childNodes.length-2)  
                            img.src = data.images[14]; 
                        else  
                            img.src = data.images[11]; 
                    } 
                }     
            } 
        }         
    } 

//----------------------------------------------------------------------------- 
</script>

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved