为TreeView添加复选框 以及复选框的联动....吐血奉献 虽然不是原创

html:要注意 这里的 ShowCheckBoxes="ALL" 为所有的节点添加CheckBox

         < asp:TreeView  ID ="TreeView1"  runat ="server"  Height ="178px"
            Width
="96px"   ShowLines ="True"  ShowCheckBoxes ="All" >
        
</ asp:TreeView >

引用 javascript

< script  type ="text/jscript"  language ="javascript" >    

 
//这个函数为刷新页面实现功能
 function   foo()   
  
{   
    
var   o   =   window.event.srcElement;   
    
if   (o.tagName   ==   "INPUT"   &&   o.type   ==   "checkbox")   
    
{   
         __doPostBack(
"","");   
     }
     
  }
   

//下面这个为不刷新页面实现
function ShowLegend(ControlID,LegendInfo)
{
    alert(LegendInfo);
 
var para = "LegendInfo="+LegendInfo + "&Visible=" + document.all(ControlID).checked;
 
var myAjax = new Ajax.Request('../ajax/WebFormChangeLegendVisible.aspx',{method: 'get', parameters:para, onComplete: RefreshMap});
}


function RefreshMap(request)
{
 
var content = request.responseText;
 parent.mapview.document.forms[
0].submit();
}


function OnTreeNodeChecked() 

    
var element = window.event.srcElement; 
    
if (!IsCheckBox(element)) 
        
return
    
    
var isChecked = element.checked; 
    
var tree = TV2_GetTreeById("TreeView1"); 
    
var node = TV2_GetNode(tree,element); 

    TV2_SetChildNodesCheckStatus(node,isChecked); 
    
//alert(element.id);

    
var parent = TV2_GetParentNode(tree,node); 
    TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked); 
    
    document.all(
"txtSelectID").value = ""
    
var aCheckBox = document.getElementsByTagName("input");
    
for (var i=0;i<aCheckBox.length;i++)
    
{
        
if(aCheckBox[i].type == "checkbox"
        
{
            
if(aCheckBox[i].checked)
            
{
                
var sID = aCheckBox[i].id;
                sID 
= sID.substring(0,sID.indexOf("CheckBox")); 
                
var obja = document.getElementById(sID.replace('n','t'));            
                
var sSelectID = obja.href.replace("javascript:__doPostBack('TreeView1','s","")
                sSelectID 
= sSelectID.replace("')","")
                
//sSelectID = sSelectID.replace("//","-")
                var aSelectID = sSelectID.split("/")
                document.all(
"txtSelectID").value = aSelectID[aSelectID.length-1]+";"+document.all("txtSelectID").value;
                
//document.all("txtSelectID").value = sSelectID+";"+document.all("txtSelectID").value;
            }

        }

    }

    
var sAllSelectID = document.all("txtSelectID").value;
    
if(sAllSelectID!="")
        sAllSelectID 
= sAllSelectID.substring(0,sAllSelectID.length-1); 
    
//alert(sAllSelectID);
    
// var para = "LegendInfo="+sAllSelectID;
//
 var myAjax = new Ajax.Request('../ajax/WebFormChangeLegendVisible.aspx',{method: 'get', parameters:para, onComplete: RefreshMap});

}
 
//set child nodes checkbox status 
function TV2_SetChildNodesCheckStatus(node,isChecked) 

    
var childNodes = TV2i_GetChildNodesDiv(node); 
    
if(childNodes == null
        
return

    
var inputs = WebForm_GetElementsByTagName(childNodes,"INPUT"); 
    
if(inputs == null || inputs.length == 0
        
return

    
for(var i = 0; i < inputs.length; i++
    

        
if(IsCheckBox(inputs[i])) 
            inputs[i].checked 
= isChecked; 
    }
 
}
 

//change parent node checkbox status after child node changed 
function TV2_NodeOnChildNodeCheckedChanged(tree,node,isChecked) 

    
if(node == null
        
return

    
var childNodes = TV2_GetChildNodes(tree,node); 

    
if(childNodes == null || childNodes.length == 0
        
return

    
var isAllSame = true

    
for(var i = 0; i < childNodes.length; i++
    

        
var item = childNodes[i]; 
        
var value = TV2_NodeGetChecked(item); 

        
if(isChecked != value) 
        

            isAllSame 
= false
            
break
        }
 
    }
 

    
var parent = TV2_GetParentNode(tree,node); 
    
if(isAllSame) 
    

        TV2_NodeSetChecked(tree,node,isChecked); 
        TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked); 
    }
 
    
else 
    

        TV2_NodeSetChecked(tree,node,
false); 
        TV2_NodeOnChildNodeCheckedChanged(tree,parent,
false); 
    }
 
}
 

//get node relative element(etc. checkbox) 
function TV2_GetNode(tree,element) 

    
var id = element.id.replace(tree.id,""); 
    id 
= id.toLowerCase().replace(element.type,""); 
    id 
= tree.id + id; 

    
var node = document.getElementById(id); 
    
if(node == null//leaf node, no "A" node 
        return element; 
    
return node; 
}
 

//get parent node 
function TV2_GetParentNode(tree,node) 

    
var div = WebForm_GetParentByTagName(node,"DIV"); 

    
//The structure of node: <table>information of node</table><div>child nodes</div> 
    var table = div.previousSibling; 
    
if(table == null
        
return null

    
return TV2i_GetNodeInElement(tree,table); 
}
 

//get child nodes array 
function TV2_GetChildNodes(tree,node) 

    
if(TV2_NodeIsLeaf(node)) 
        
return null

    
var children = new Array(); 
    
var div = TV2i_GetChildNodesDiv(node); 
    
var index = 0

    
for(var i = 0; i < div.childNodes.length; i++
    

        
var element = div.childNodes[i]; 
        
if(element.tagName != "TABLE"
        
continue

        
var child = TV2i_GetNodeInElement(tree,element); 
        
if(child != null
            children[index
++= child; 
    }
 
    
return children; 
}
 

function TV2_NodeIsLeaf(node) 

    
return !(node.tagName == "A"); //Todo 
}
 

function TV2_NodeGetChecked(node) 

    
var checkbox = TV2i_NodeGetCheckBox(node); 
    
return checkbox.checked; 
}
 

//判断:只要该节点有一个字节点被选中,则该节点一定被选中 
function TV2_NodeSetChecked(tree,node,isChecked) 

    
var checkbox = TV2i_NodeGetCheckBox(node); 
    
if(checkbox != null
    

        
var childNodes = TV2_GetChildNodes(tree,node); 
        
for(var i = 0; i < childNodes.length; i++
        

            
var item = childNodes[i]; 
            
var value = TV2_NodeGetChecked(item); 
            
if(value) 
            

                isChecked 
= true ; 
                
break
            }
 
        }
 
        checkbox.checked 
= isChecked; 
    }
 
}
 

function IsCheckBox(element) 

    
if(element == null
        
return false
    
return (element.tagName == "INPUT" && element.type.toLowerCase() == "checkbox"); 
}
 

//get tree 
function TV2_GetTreeById(id) 

    
return document.getElementById(id); 
}
 

// 
//
private mothods, with TV2i_ prefix 
//
 

//get div contains child nodes 
function TV2i_GetChildNodesDiv(node) 

    
if(TV2_NodeIsLeaf(node)) 
        
return null

    
var childNodsDivId = node.id + "Nodes"
    
return document.getElementById( childNodsDivId ); 
}
 

    
//find node in element 
function TV2i_GetNodeInElement(tree,element) 

    
var node = TV2i_GetNodeInElementA(tree,element); 
    
if(node == null
    

        node 
= TV2i_GetNodeInElementInput(tree,element); 
    }
 
    
return node; 
}
 

//find "A" node 
function TV2i_GetNodeInElementA(tree,element) 

    
var as = WebForm_GetElementsByTagName(element,"A"); 
    
if(as== null || as.length == 0
        
return null

    
var regexp = new RegExp("^" + tree.id + "n/d+$"); 

    
for(var i = 0; i < as.length; i++
    

        
if(as[i].id.match(regexp)) 
        

            
return as[i]; 
        }
 
    }
 
    
return null
}
 

//find "INPUT" node 
function TV2i_GetNodeInElementInput(tree,element) 

    
var as = WebForm_GetElementsByTagName(element,"INPUT"); 
    
if(as== null || as.length == 0
        
return null

    
var regexp = new RegExp("^" + tree.id + "n/d+"); 
    
for(var i = 0; i < as.length; i++
    

        
if(as[i].id.match(regexp)) 
        

            
return as[i]; 
        }
 
    }
 
    
return null
}
 

//get checkbox of node 
function TV2i_NodeGetCheckBox(node) 

    
if(IsCheckBox(node)) 
        
return node; 

    
var id = node.id + "CheckBox"
    
return document.getElementById(id); 
}
  

function showtab(m,n,count){
 
var strPic1='url(../image/1.bmp)';
 
var strPic2='url(../image/2.bmp)';
 
if (m==8{
 strPic1
='url(../image/switch03_1.gif)';
 strPic2
='url(../image/switch03_2.gif)'; }


 
for(var i=1;i<=count;i++){
  
if (i==n){   
   getObject(m
+'_'+i).style.background=strPic1;
   getObject(
'tab_'+m+'_'+i).style.display='';   
   }

  
else {
   getObject(m
+'_'+i).style.background=strPic2;
   getObject(
'tab_'+m+'_'+i).style.display='none';
   }

 }

}

function getObject(objectId) {
    
if(document.getElementById && document.getElementById(objectId)) {
 
// W3C DOM
 return document.getElementById(objectId);
    }
 else if (document.all && document.all(objectId)) {
 
// MSIE 4 DOM
 return document.all(objectId);
    }
 else if (document.layers && document.layers[objectId]) {
 
// NN 4 DOM.. note: this won't find nested layers
 return document.layers[objectId];
    }
 else {
 
return false;
    }

}
 // getObject

function Init()
{
    
//var w = document.body.scrollWidth;
    var w = document.body.clientWidth;
    
//var h = document.body.scrollHeight;
    var h = document.body.clientHeight;
    
    getObject(
"tabTree").style.height = h-90;    
    getObject(
"divHRTree").style.height=h-100;
}


  
</ script >

cs代码:

 

 

protected   void  Page_Load( object  sender, EventArgs e)
    
{
            
if (!Page.IsPostBack)
            
{
                TreeView1.Attributes.Add(
"onclick""OnTreeNodeChecked()"); 
            }

    }


protected   void  TreeView1_TreeNodeCheckChanged( object  sender, TreeNodeEventArgs e)
    
{

        SetChildChecked ( e.Node );

    }

private   void  SetChildChecked ( TreeNode p_Node )

    
{
        
foreach ( TreeNode _n in p_Node.ChildNodes )

        
{
            _n.Checked 
= p_Node.Checked;

            
if ( _n.ChildNodes.Count > 0  )

            
{
                SetChildChecked( _n );

            }


        }


    }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值