webform下的treeview控件,能否用脚本实现当点击父结点的checkbox时,子结点的checkbox的checked属性也跟着改变。 http://expert.csdn.net/Expert/topic/1385/1385726.xml 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 呵呵,在江雨兄的帮助下我在20分钟前刚刚完成这个函数,我也共享,希望对你有帮助。这是我写的一个关于操作TreeView的ascx组件。客户端完成check的任务。服务器端代码是从Treeview写入xml,和从xml写入Treeview.-----------------------------------------------------------<%@ Control Language="c#" AutoEventWireup="false" Codebehind="TreeViewLib.ascx.cs" Inherits="WACR.TreeViewLib" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%><script language="javascript">////////////设置父节点下所有的子节点的Check值function CheckChildren(parentNode,checked){ var i; var len=parentNode.getChildren().length; var subNode=new Array(); var s; subNode=parentNode.getChildren(); if(parseInt(subNode.length)!=0) { for(i=0;i<subNode.length;i++) { var bCheckBox; bCheckBox=subNode[i].getAttribute("checkbox"); if(bCheckBox!=null) { subNode[i].setAttribute("checked",checked); } } }}////////////根据子节点设置ParentNode的Check值,如果父节点的所有子节点都为选中,则它为选中,否则为非选中function CheckParentNode(node){ var i; var parentNode=node.getParent(); if(parentNode!=null) { var len=parentNode.getChildren().length; var subNode=new Array(); var s; subNode=parentNode.getChildren(); bChecked=false; if(parseInt(subNode.length)!=0) { for(i=0;i<subNode.length;i++) { var bCheckBox; var l_bChecked; bCheckBox=subNode[i].getAttribute("checkbox"); if(bCheckBox!=null) { l_bChecked=subNode[i].getAttribute("checked"); if(l_bChecked!=null &&l_bChecked==true) { bChecked=true; break; } } } } alert(bChecked); parentNode.setAttribute("checked",bChecked); }}</script>-------------------------------------------------- /// <summary> /// 从TreeView中生成XML文件 /// </summary> /// <param name="tv">Treevie控件</param> /// <param name="rootText">根的名称</param> /// <returns></returns> public string GenXMLFromTreeview(TreeView tv,string rootText) { MemoryStream s=new MemoryStream(); XmlTextWriter x = new XmlTextWriter (s, System.Text.Encoding.GetEncoding("GB2312")); x.Formatting = Formatting.Indented; x.WriteStartDocument(false); x.WriteComment("This file represents another fragment of a book store inventory database"); x.WriteStartElement(rootText); x.WriteAttributeString("text",rootText); foreach(TreeNode tn in tv.Nodes) { AddXMLFromTreeView(tn,x); } x.WriteEndElement(); //Write the XML to file and close the myXmlTextWriter x.Flush(); String sXml = System.Text.Encoding.Default.GetString(s.ToArray()); x.Close(); return sXml; } public string GenTreeViewFromXML(TreeView tv,string xml) { string sError=""; try { // SECTION 1. Create a DOM Document and load the XML data into it. XmlDocument dom = new XmlDocument(); dom.LoadXml(xml); // SECTION 2. Initialize the TreeView control. tv.Nodes.Clear(); AddTreeViewFromXML(dom.DocumentElement,tv.Nodes); } catch(XmlException xmlEx) { sError=xmlEx.Message; } catch(Exception ex) { sError=ex.Message; } return sError; } /// <summary> /// 从TreeView中生成XML文件 /// </summary> /// <param name="tn">树结点</param> /// <param name="xtw">xmlTextWrite节点</param> private void AddXMLFromTreeView(TreeNode tn,XmlTextWriter xtw) { if(tn==null) { return; } xtw.WriteStartElement("treenode"); xtw.WriteAttributeString("id",tn.ID); xtw.WriteAttributeString("text",tn.Text); xtw.WriteAttributeString("checkbox",tn.CheckBox.ToString()); xtw.WriteAttributeString("checked",tn.Checked.ToString()); xtw.WriteAttributeString("navigateurl",tn.NavigateUrl); xtw.WriteAttributeString("target",tn.Target); xtw.WriteAttributeString("imageurl",tn.ImageUrl); xtw.WriteAttributeString("expandedimageurl",tn.ExpandedImageUrl); if(tn.Nodes.Count>0) { foreach(TreeNode node in tn.Nodes) { AddXMLFromTreeView(node,xtw); } } xtw.WriteEndElement(); } /// <summary> /// 向TreeView增加节点,数据源来自于xml /// </summary> /// <param name="inXmlNode">xml node</param> /// <param name="tnc">Tree节点集合</param> private void AddTreeViewFromXML(XmlNode inXmlNode,TreeNodeCollection tnc) { TreeNode tn=null; if(inXmlNode==null) return; tn=new TreeNode(); if(inXmlNode.Attributes.Count>0) { tn.Text=inXmlNode.Attributes["text"].Value; } if(inXmlNode.Attributes.Count>1) { tn.ID=inXmlNode.Attributes["id"].Value; tn.CheckBox=bool.Parse(inXmlNode.Attributes["checkbox"].Value); tn.Checked=bool.Parse(inXmlNode.Attributes["checked"].Value); tn.NavigateUrl=inXmlNode.Attributes["navigateurl"].Value; tn.Target=inXmlNode.Attributes["target"].Value; tn.ImageUrl=inXmlNode.Attributes["imageurl"].Value; tn.ExpandedImageUrl=inXmlNode.Attributes["expandedimageurl"].Value; } tnc.Add(tn); if(inXmlNode.HasChildNodes) { foreach(XmlNode xn in inXmlNode.ChildNodes) { AddTreeViewFromXML(xn,tn.Nodes); } } }----------------------------------------------如果好用,就谢江雨兄吧。春节快乐 调用页面 function checknode(tree) { var node; node=tree.getTreeNode(tree.clickedNodeIndex); CheckChildren(node,node.getAttribute("checked")); CheckParentNode(node); }如果仅仅为check下面的子节点,那么服务器端的代码就不用要了 不过,为什么用以上脚本改变了节点的checkbox属性后,在服务器端遍历treeview时,得到的节点的checkbox属性还是原来的一样?? vs2010断点无效,有经验的进来看下 mvc架构下的access数据库系统,数据集如何实现IEnumerable C# 中怎样声明一个bool类型的函数?! 高分求一正则表达式 C#中通过选择单选按钮实现面板上内容的切换 NET Framework 2.0自定义设计器,键盘方向键控制自定义控件的问题 写了一个window服务,想做一个servercontrol象sql2000那样在任务栏可以控制,那位兄弟知道的帮帮忙!! 请求C#老手帮助 存储过程分页怎么不成功?看看是哪里出问题了 请讨论c#和delphi做数据库应用的优劣. 高分请教 我的程序没错啊,给看看吧
这是我写的一个关于操作TreeView的ascx组件。客户端完成check的任务。服务器端代码是从Treeview写入xml,和从xml写入Treeview.
-----------------------------------------------------------
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="TreeViewLib.ascx.cs" Inherits="WACR.TreeViewLib" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<script language="javascript">////////////设置父节点下所有的子节点的Check值
function CheckChildren(parentNode,checked)
{
var i;
var len=parentNode.getChildren().length;
var subNode=new Array();
var s;
subNode=parentNode.getChildren(); if(parseInt(subNode.length)!=0)
{
for(i=0;i<subNode.length;i++)
{
var bCheckBox;
bCheckBox=subNode[i].getAttribute("checkbox");
if(bCheckBox!=null)
{
subNode[i].setAttribute("checked",checked);
}
} }
}
////////////根据子节点设置ParentNode的Check值,如果父节点的所有子节点都为选中,则它为选中,否则为非选中
function CheckParentNode(node)
{
var i;
var parentNode=node.getParent();
if(parentNode!=null)
{
var len=parentNode.getChildren().length;
var subNode=new Array();
var s;
subNode=parentNode.getChildren(); bChecked=false;
if(parseInt(subNode.length)!=0)
{
for(i=0;i<subNode.length;i++)
{
var bCheckBox;
var l_bChecked;
bCheckBox=subNode[i].getAttribute("checkbox");
if(bCheckBox!=null)
{
l_bChecked=subNode[i].getAttribute("checked");
if(l_bChecked!=null &&l_bChecked==true)
{
bChecked=true;
break;
}
}
}
}
alert(bChecked);
parentNode.setAttribute("checked",bChecked);
}
}</script>
--------------------------------------------------
/// <summary>
/// 从TreeView中生成XML文件
/// </summary>
/// <param name="tv">Treevie控件</param>
/// <param name="rootText">根的名称</param>
/// <returns></returns>
public string GenXMLFromTreeview(TreeView tv,string rootText)
{
MemoryStream s=new MemoryStream();
XmlTextWriter x = new XmlTextWriter (s, System.Text.Encoding.GetEncoding("GB2312"));
x.Formatting = Formatting.Indented;
x.WriteStartDocument(false);
x.WriteComment("This file represents another fragment of a book store inventory database");
x.WriteStartElement(rootText);
x.WriteAttributeString("text",rootText); foreach(TreeNode tn in tv.Nodes)
{
AddXMLFromTreeView(tn,x); }
x.WriteEndElement();
//Write the XML to file and close the myXmlTextWriter
x.Flush();
String sXml = System.Text.Encoding.Default.GetString(s.ToArray());
x.Close();
return sXml; } public string GenTreeViewFromXML(TreeView tv,string xml)
{
string sError="";
try
{
// SECTION 1. Create a DOM Document and load the XML data into it.
XmlDocument dom = new XmlDocument();
dom.LoadXml(xml);
// SECTION 2. Initialize the TreeView control.
tv.Nodes.Clear();
AddTreeViewFromXML(dom.DocumentElement,tv.Nodes); }
catch(XmlException xmlEx)
{
sError=xmlEx.Message;
}
catch(Exception ex)
{
sError=ex.Message; }
return sError;
}
/// <summary>
/// 从TreeView中生成XML文件
/// </summary>
/// <param name="tn">树结点</param>
/// <param name="xtw">xmlTextWrite节点</param>
private void AddXMLFromTreeView(TreeNode tn,XmlTextWriter xtw)
{
if(tn==null)
{
return;
} xtw.WriteStartElement("treenode");
xtw.WriteAttributeString("id",tn.ID);
xtw.WriteAttributeString("text",tn.Text);
xtw.WriteAttributeString("checkbox",tn.CheckBox.ToString());
xtw.WriteAttributeString("checked",tn.Checked.ToString());
xtw.WriteAttributeString("navigateurl",tn.NavigateUrl);
xtw.WriteAttributeString("target",tn.Target);
xtw.WriteAttributeString("imageurl",tn.ImageUrl);
xtw.WriteAttributeString("expandedimageurl",tn.ExpandedImageUrl); if(tn.Nodes.Count>0)
{
foreach(TreeNode node in tn.Nodes)
{ AddXMLFromTreeView(node,xtw);
} }
xtw.WriteEndElement(); } /// <summary>
/// 向TreeView增加节点,数据源来自于xml
/// </summary>
/// <param name="inXmlNode">xml node</param>
/// <param name="tnc">Tree节点集合</param>
private void AddTreeViewFromXML(XmlNode inXmlNode,TreeNodeCollection tnc)
{
TreeNode tn=null;
if(inXmlNode==null)
return;
tn=new TreeNode();
if(inXmlNode.Attributes.Count>0)
{
tn.Text=inXmlNode.Attributes["text"].Value;
}
if(inXmlNode.Attributes.Count>1)
{ tn.ID=inXmlNode.Attributes["id"].Value;
tn.CheckBox=bool.Parse(inXmlNode.Attributes["checkbox"].Value);
tn.Checked=bool.Parse(inXmlNode.Attributes["checked"].Value);
tn.NavigateUrl=inXmlNode.Attributes["navigateurl"].Value;
tn.Target=inXmlNode.Attributes["target"].Value;
tn.ImageUrl=inXmlNode.Attributes["imageurl"].Value;
tn.ExpandedImageUrl=inXmlNode.Attributes["expandedimageurl"].Value;
} tnc.Add(tn); if(inXmlNode.HasChildNodes)
{
foreach(XmlNode xn in inXmlNode.ChildNodes)
{
AddTreeViewFromXML(xn,tn.Nodes);
}
}
}
----------------------------------------------
如果好用,就谢江雨兄吧。
春节快乐
function checknode(tree)
{
var node;
node=tree.getTreeNode(tree.clickedNodeIndex);
CheckChildren(node,node.getAttribute("checked"));
CheckParentNode(node);
}如果仅仅为check下面的子节点,那么服务器端的代码就不用要了