日期:2014-05-20  浏览次数:20437 次

(**asp.net1.1)如何现实在treeview中,选中父节点,其子节点也被选中(此节点的以下子节点也被选中)
如题

------解决方案--------------------
在cs文件里PageLoad函数增加如下代码:
if (!IsPostBack) {
TreeView1.Attributes.Add( "oncheck ", "tree_oncheck(this) ");
Button1.Attributes.Add( "onclick ", "FindCheckedFromTree(TreeView1); ");
}
注意:TreeView1和Button1都是服务器端控件。
在aspx文件中,增加如下代码:
<script language= "JavaScript ">
<!--
function tree_oncheck(tree)
{
var node=tree.getTreeNode(event.treeNodeIndex);
setcheck(node);
}
function setcheck(node)
{
var i;
var ChildNode=new Array();
ChildNode=node.getChildren();

//首先处理其上级节点的状态
if (!node.getAttribute( "Checked ")) { //如果没有选中,那么其所有的父节点状态都是未选中
var ParentNode = node.getParent();
while (ParentNode != null && ParentNode.getAttribute( "Checked ")) {
ParentNode.setAttribute( "Checked ", "false ");
ParentNode = ParentNode.getParent();
}
}
else { //如果选中,那么检查同级节点,如果都选中,那么自动选中父节点,并且再检查父节点的同级节点
node.setAttribute( "expanded ", "true ");
var ParentNode = node;
while ((ParentNode=ParentNode.getParent()) != null) {
var j = 0;
var BrotherNodes = new Array();
BrotherNodes = ParentNode.getChildren();
for (i = 0; i < BrotherNodes.length; i ++) {
if (BrotherNodes[i].getAttribute( "Checked ") == true) {
j = j + 1;
}
else {
i = i + 1;
break;
}
}
if (i == j) {
ParentNode.setAttribute( "Checked ", "true ");
}
else {
break;
}
}

}

//现在处理子节点,将所有子节点都选中,或者取消选中
for(i=0;i <ChildNode.length;i++)
{
var cNode;
cNode=ChildNode[i];
cNode.setAttribute( "Checked ", node.getAttribute( "Checked "));
if(parseInt(cNode.getChildren().length)!=0)
setcheck(cNode);
}
}

//从Treeview中寻找被选中的所有节点
function FindCheckedFromTree(tree) {
var i = 0;
var node;
document.Form1.Text1.value = ' ';
while ((node=tree.getTreeNode(i.toString(10))) != null) {
if (node.getAttribute( "Checked "))
AddChecked(node);
FindCheckedFromNode(node);
i = i + 1;
}
}

//从一个节点寻找其中所有被选中节点(递归)
function FindCheckedFromNode(node) {
var i = 0;
var nodes = new Array();
nodes = node.getChildren();

//alert( 'Now searching ' + ': ' + node.getAttribute( "Text "));
for (i = 0; i < nodes.length; i++) {
var cNode;
cNode=nodes[i];
if (cNode.getAttribute( "Checked "))
AddChecked(cNode);

if (parseInt(cNode.getChildren().length) != 0 ) {
FindCheckedFromNode(cNode);
}
}
}

//标记一个节点被选中
function AddChecked(node) {
//alert(node.getAttribute( "Text ") + ' is checked ');
document.Form1.Text1.value += node.getAttribute( "Text ");
}
// -->
</script>

别忘了,还需要一个html输入框控件,要使它运行于服务器端,并且readonly,我还不知道该如何隐藏它。