- 浏览: 27127 次
- 性别:
- 来自: 成都
最新评论
最近在实习做的项目中,需要将所有省以及省下的市以树的形式展现出来,以便选择各个需要的省市。我先是将所有省市保存在一个XML文件中,然后读取XML文件把树展示出来。最后就是要实现选择的联动了,但在使用时发现,在选中复选框时不会引起回发事件,于是一顿猛查。找到了如下方法:
.aspx文件中加一段JavaScript代码:
CS文件中的代码如下:
使用了上述方法后,功能达到了,但是每次点击的时候都会刷新,客户体验非常的差
于是使用了AJAX控件(使用时要将__doPostBack("","");
改为__doPostBack("UpdatePanelID","");),可是又会报脚本错误。没办法了,只有找无刷新的咯,要不恐怕用户和服务器都受不了。
后来终于找到了,不过本人这种低级水平是看不懂,不管了,先记下在说
HTML代码
JavaScript代码:
CS代码
最后要说的是不管使用何种方法都要记得引用命名空间,因为都涉及到XML文件的操作
<asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" ShowLines="True" ExpandDepth="0" OnTreeNodeCheckChanged="TreeView1_TreeNodeCheckChanged"> </asp:TreeView>
.aspx文件中加一段JavaScript代码:
<script type="text/javascript"> // 点击复选框时触发事件 function postBackByObject() { var node = window.event.srcElement; if (node.tagName == "INPUT" && node.type == "checkbox") { __doPostBack("",""); } } </script>
CS文件中的代码如下:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { XmlDocument xdoc = new XmlDocument(); xdoc.Load(@"E:\WebSite1\XMLFile.xml"); XmlNodeList elemList = xdoc.DocumentElement.ChildNodes; foreach (XmlNode pxn in elemList) { TreeNode tn = new TreeNode(); tn.Text = pxn.Name; tn.Value = pxn.Attributes["code"].Value; TreeView1.Nodes.Add(tn); if (pxn.ChildNodes.Count != 0) { XmlNodeList codeList = pxn.ChildNodes; foreach (XmlNode item in codeList) { TreeNode codeTn = new TreeNode(); codeTn.Text = item.Name; codeTn.Value = item.Attributes["code"].Value; tn.ChildNodes.Add(codeTn); } } } //绑定事件 TreeView1.Attributes.Add("onclick", "postBackByObject()"); } } protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e) { SetChildChecked(e.Node); // 判断是否是根节点 if (e.Node.Parent != null) { SetParentChecked(e.Node); } } /// <summary> /// 根据父节点状态设置子节点的状态 /// </summary> /// <param name="parentNode">树的一个父节点</param> private void SetChildChecked(TreeNode parentNode) { foreach (TreeNode node in parentNode.ChildNodes) { node.Checked = parentNode.Checked; if (node.ChildNodes.Count > 0) { SetChildChecked(node); } } } /// <summary> /// 根据子节点状态设置父节点的状态 /// </summary> /// <param name="childNode">树的一个子节点</param> private void SetParentChecked(TreeNode childNode) { TreeNode parentNode = childNode.Parent; if (!parentNode.Checked && childNode.Checked) { int ichecks = 0; foreach (TreeNode node in parentNode.ChildNodes) { if (node.Checked) { ichecks++; } } if (ichecks == parentNode.ChildNodes.Count) { parentNode.Checked = true; if (parentNode.Parent != null) { SetParentChecked(parentNode); } } } else if (parentNode.Checked && !childNode.Checked) { parentNode.Checked = false; } }
使用了上述方法后,功能达到了,但是每次点击的时候都会刷新,客户体验非常的差
于是使用了AJAX控件(使用时要将__doPostBack("","");
改为__doPostBack("UpdatePanelID","");),可是又会报脚本错误。没办法了,只有找无刷新的咯,要不恐怕用户和服务器都受不了。
后来终于找到了,不过本人这种低级水平是看不懂,不管了,先记下在说
HTML代码
<div> <asp:TreeView ID="tvSelectList" runat="server" ShowCheckBoxes="All" ShowLines="True" onclick="OnTreeNodeChecked()"> </asp:TreeView> </div>
JavaScript代码:
<script language="javascript" type="text/javascript"> function OnTreeNodeChecked() { var ele = event.srcElement; if(ele.type=='checkbox') { var childrenDivID = ele.id.replace('CheckBox','Nodes'); var div = document.getElementById(childrenDivID); if(div != null) { var checkBoxs = div.getElementsByTagName('INPUT'); for(var i=0;i<checkBoxs.length;i++) { if(checkBoxs[i].type=='checkbox') checkBoxs[i].checked=ele.checked; } } else { var div = GetParentByTagName(ele,'DIV'); var checkBoxs = div.getElementsByTagName('INPUT'); var parentCheckBoxID = div.id.replace('Nodes','CheckBox'); var parentCheckBox = document.getElementById(parentCheckBoxID); for(var i=0;i<checkBoxs.length;i++) { if(checkBoxs[i].type=='checkbox' && (!checkBoxs[i].checked)) { parentCheckBox.checked = false; return; } } parentCheckBox.checked = true; } } } function GetParentByTagName(element, tagName) { var parent = element.parentNode; var upperTagName = tagName.toUpperCase(); while (parent && (parent.tagName.toUpperCase() != upperTagName)) { parent = parent.parentNode ? parent.parentNode : parent.parentElement; } return parent; } </script>
CS代码
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { XmlDocument xdoc = new XmlDocument(); xdoc.Load(@"E:\WebSite1\XMLFile.xml"); XmlNodeList elemList = xdoc.DocumentElement.ChildNodes; foreach (XmlNode pxn in elemList) { TreeNode tn = new TreeNode(); tn.Text = pxn.Name; tn.Value = pxn.Attributes["code"].Value; tvSelectList.Nodes.Add(tn); if (pxn.ChildNodes.Count != 0) { XmlNodeList codeList = pxn.ChildNodes; foreach (XmlNode item in codeList) { TreeNode codeTn = new TreeNode(); codeTn.Text = item.Name; codeTn.Value = item.Attributes["code"].Value; tn.ChildNodes.Add(codeTn); } } } } }
最后要说的是不管使用何种方法都要记得引用命名空间,因为都涉及到XML文件的操作
using System.Xml;
- XMLFile.rar (3.5 KB)
- 下载次数: 5
发表评论
-
模仿邮箱添加附件
2011-03-02 11:43 0模仿邮箱添加附件 -
数据控件中使用OnClientClick出现服务器标记格式不正确
2010-09-11 16:45 1109数据控件中使用如下代码会出现解析错误(服务器标记格式不正确): ... -
Update Progress Indicator
2010-09-11 16:37 0This is quite needed and requir ... -
ASP.NET倒计时
2010-06-02 22:11 3190这几天做的网站需要一个倒计时,如是作了一个如下的: < ... -
ASP.NET中弹出消息框
2009-09-14 13:47 1512最普通的写法是 Response.Write(" ... -
Association references unmapped class的解决方法
2009-08-16 00:09 5740搞了半天,原来我的NHibernate.cfg.xml文件里没 ... -
错误:回发或回调参数无效
2009-08-10 16:09 1822错误信息: 回发或回调参数无效。在配置中使用 <pag ... -
C#连接数据库
2009-08-01 20:56 13261.C# 连 接Access 程序代码: using Sy ... -
BinaryCode
2009-08-01 17:22 654基础书上的一道题,也记下来吧。 给一个由整数组成的加密字符串, ... -
随机生成验证码
2009-07-31 19:49 0保存着吧,以后好用 & ... -
GridView中用CheckBox实现全选功能
2009-07-29 11:31 2630在.aspx的<title></title& ...
相关推荐
treeview父子节点联动,javascript实现。
vb treeview控件父节点和子节点联动,如果父节点被选中,则子节点全部被选中,如果有一个子节点不被选中,则所有父节点都不被选中,如果有子节点不被选中,当选中该子节点,而该子节点同级节点都被选中时,则其父...
TreeView父子联动效果保持节点状态一致 .files.rarTreeView父子联动效果保持节点状态一致 .files.rar
在TreeView中实现选择父节点同时选择所有子节点,选择一个子节点同时选择其父节点,支持多级选择。取消一个子节点判断同级是否有选择,没有选择就取消父级。
VB的Treeview控件复选框选择子节点,父节点自动选择,选择父节点,全部子节点自动选择,取消父节点,全部子节点自动取消,可实现爷、父、子甚至更多层级的节点选择联动。
WPF 使用MVVM设计模式对进行增删改操作 具体内容可以看我的博客:https://blog.csdn.net/Dear200892/article/details/78892611
bootstrap-treeview 联动选择,当一个节点选择状态发生变化时,其父节点、子节点联动变化。
通过数据库中的数据自动添加到Treeview控件中,不过数据控件用的是ADO组件,另外数据库中存放Treeview节点数据表的结构位:ID:integer;PID:Integer;Caption:string;字段名成可以不同,但是类型必须相同! 公用单元:...
javascript-TreeView父子联动效果保持节点状态一致
asp.net TreeView 与 GridView 相结合管理无限极分类,本资源用javascript脚步实现选中离开后依然保持变色,直到选中另一个节点
2、纯粹的三态树结构,未添加父子节点联动等效果,给控件使用者更多的自由 3、增加三态的树节点类型,直接把状态保存在树节点中,而不是勉强地在treeview控件里面打补丁,使用更流畅 4、应用csc3.5的技术,直接扩展...
用js实现TreeView复选框的联动,选择父子点,子节点全部选中,选中子节点,父节点选中,取消全部子节点,父节点取消选中
2、纯粹的三态树结构,未添加父子节点联动等效果,给控件使用者更多的自由 3、增加三态的树节点类型,直接把状态保存在树节点中,而不是勉强地在treeview控件里面打补丁,使用更流畅 4、应用csc3.5的技术,直接扩展...
//联动原则:1、当一个节点的状态发生变化,其各级子节点均联动变化; // 2、当一个节点状态=false时,其各级子节点内至少一个节点的状态=false; //联动效果: //1、当一个节点状态变化时,其各级子节点状态联动...
TreeView实现复选联动及GridView导出Excel
将数据库中的具有一定规律的数据分层显示在TreeView的各个节点上。
文件包括两个lib(ClassLib_CheckedComboBox,ClassLib_...其中DevExpress风格的实现了CheckComboBox与TreeView的结合,可以实现父节点、子节点的联动选择。需要Devexpress v8.2 分有点多,但绝对是好东西
当选择或取消选择TreeView的CheckBoxes的状态时,它的子节点和相关的父节点状态都随之变化。