首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

怎么实现treeview选种父节点的checkbox后其子节点的checkbox全部选种打上钩

2011-12-10 
如何实现treeview选种父节点的checkbox后其子节点的checkbox全部选种打上钩我写了个代码但是提示我集合已

如何实现treeview选种父节点的checkbox后其子节点的checkbox全部选种打上钩
我写了个代码但是提示我
集合已修改:可能无法实现枚举操作
代码如下
  protected   void   TreeView1_TreeNodeCheckChanged(object   sender,   TreeNodeEventArgs   e)
        {
               
                if   (TreeView1.CheckedNodes.Count   >   0)
                {
                        foreach   (TreeNode   no   in   TreeView1.CheckedNodes)
                        {
                                if   (no.ChildNodes.Count   >   0)
                                {
                                        foreach   (TreeNode   chino   in   no.ChildNodes)
                                        {
                                                chino.Checked   =   true;
                                        }
                                }
                        }
                }
        }
而且TreeView1_TreeNodeCheckChanged事件也不是在点节点前的checkbox触发的
我想实现点节点前的checkbox   就触发事件   如果该节点有子节点   ,则该节点下所有子节点被选种   怎么弄

[解决办法]
<%@ Page Language= "C# " %>
<script runat= "server ">
protected void Page_Load(object sender, EventArgs e)
{
TreeView1.Attributes.Add( "onclick ", "OnClientTreeNodeChecked(event) ");
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Request.Form[ "CheckedNode "] != null)
{
string CheckedNodeValue = Request.Form[ "CheckedNode "];
if (CheckedNodeValue == " ")
return;

if (CheckedNodeValue.EndsWith( ", "))
CheckedNodeValue = CheckedNodeValue.TrimEnd( ', ');

Response.Write( "您选择的节点有: "+CheckedNodeValue);
}
}
</script>
<html xmlns= "http://www.w3.org/1999/xhtml ">
<head id= "Head1 " runat= "server ">
<title> 客户端实现全选子节点 </title>
<script type= "text/javascript " language= "javascript ">
//识别不同的浏览器
function getTargetElement(evt) {
var elem
if (evt.target)
{
elem = (evt.target.nodeType == 3) ? evt.target.parentNode : evt.target
}
else
{
elem = evt.srcElement
}
return elem
}
function OnClientTreeNodeChecked(evt)


{
evt = (evt) ? evt : ((window.event) ? window.event : " ");
if(evt == " ")
{
return;
}
var obj = getTargetElement(evt);
var hasTreeNode = false;
if(obj.tagName)
{
if (obj.tagName == "INPUT " && obj.type == "checkbox ") {
var treeNode = obj;
while (obj.tagName != "TABLE ")
{
obj = obj.parentNode;
}
var parentTreeDeep = obj.rows[0].cells.length;
var parentTreeNode = obj.rows[0].cells[0];
var oDiv = obj.parentNode;
if( null == oDiv )
{
return;
}
if( 1 != oDiv.nodeType)
{
return;
}
var tables = oDiv.getElementsByTagName( "TABLE ");
if( null == tables)
{
return;
}
var tableCount = tables.length;
if(tableCount < 1)
{
return;
}
for (i = 0; i < tableCount; i++)
{
if ( obj == tables[i] )
{
hasTreeNode = true;
i++;
if (tableCount == i )
{
return;
}
}
if (hasTreeNode)
{
var childTreeDeep = tables[i].rows[0].cells.length;
if (childTreeDeep > parentTreeDeep)
{
var cellTreeNode = tables[i].rows[0].cells[childTreeDeep - 1];
var inputs = cellTreeNode.getElementsByTagName( "INPUT ");
if( null != inputs)
{
inputs[0].checked = treeNode.checked;
}
}
else
{
return;
}
}
}
}
}
}
function ShowCheckbox()
{
var TreeView = " <%=TreeView1.ClientID %> "
var checkNode = document.getElementById( "CheckedNode ")
var checkboxs = document.getElementById(TreeView).getElementsByTagName( "INPUT ")
for(i=0;i <checkboxs.length;i++)
{
if(checkboxs[i].type == "checkbox "
&& checkboxs[i].name.substr(0,TreeView.length) == TreeView
&& checkboxs[i].checked )
{
checkNode.value += checkboxs[i].title + ", "
}
}
}
</script>
</head>
<body>
<form id= "form1 " runat= "server ">
<asp:TreeView ID= "TreeView1 " runat= "server " ShowLines= "true "
ShowCheckBoxes= "All ">
<Nodes>
<asp:TreeNode Text= "【孟子E章】站点一 " SelectAction= "SelectExpand ">
<asp:TreeNode Text= "ASP.NET技术 ">
<asp:TreeNode Text= "缓存管理 "/>
<asp:TreeNode Text= "状态管理 " />
<asp:TreeNode Text= "导航控件 ">
<asp:TreeNode Text= "Menu 服务器控件 " />
<asp:TreeNode Text= "SiteMapPath 服务器控件 " />
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text= "C#技术 " />
</asp:TreeNode>
<asp:TreeNode Text= "【孟子E章】站点二 " />
<asp:TreeNode Text= "【孟子E章】站点三 ">


<asp:TreeNode Text= "Web开发技术 " />
<asp:TreeNode Text= "Web脚本库 " />
</asp:TreeNode>
</Nodes>
</asp:TreeView>
<input type= "hidden " name= "CheckedNode " id= "CheckedNode "/>
<asp:Button ID= "Button1 " runat= "server " OnClick= "Button1_Click "
OnClientClick= "ShowCheckbox() " Text= "提交 " />
</form>
</body>
</html>

[解决办法]
foreach是只读的 不能操作其读取的 集合 使用for

if (TreeView1.CheckedNodes.Count > 0)
{
TreeNode no = null;
for (int ix = 0; ix < TreeView1.CheckedNodes.Count; ix++ )
{
no = TreeView1.CheckedNodes[ix];
if (no.ChildNodes.Count > 0)
{
for (int jx = 0; jx < no.ChildNodes; jx++ )
{
no.ChildNodes[jx].Checked = true;
}
}
}
}

热点排行