c# js遍历复选框treeview所有节点复选框是否选中状态

页面导航:
→ 正文内容 c# treeview绑定
c#的treeview绑定和获取值的方法
这篇文章主要介绍了c#的treeview绑定和获取值的方法,需要的朋友可以参考下
对Treelist 的一些功能的实现
1.数据绑定最基本的两个属性:KeyFieldName和ParentFieldName。(这两个属性一设置就基本上可以实现分级了)
可以通过代码的编写实现,也可以直接在属性里面直接实现。
这种数据库设计是比较常见的,一般数据满足树形关系就可以这样设计。绑定数据时,只需指定DataSource为对应 的DataTable,指定KeyFieldName为表主键字段,ParentFieldName为表指向主键的外键字段名。
代码如下:private void BindData(){&&& this.tlOffice.DataSource = dtO&&& tlOffice.KeyFieldName = "OfficeID";&&& //tlOffice.DataMember = "OfficeName";&&& tlOffice.Columns["OfficeName"].Caption = "局名称";&&& tlOffice.ParentFieldName = "ParentOfficeID";}
2 基本功能的实现
①& . 选择某一节点时,该节点的子节点全部选择& 取消某一节点时,该节点的子节点全部取消选择
哪个节点引起行为的?节点是选中还是取消选中?由此确定方法的两个参数:TreeListNode和CheckState。遍历该节点及其子孙,并将其选中状态设置为该节点的状态即可。
代码如下:/// &summary&&&&&&&&& /// 选择某一节点时,该节点的子节点全部选择& 取消某一节点时,该节点的子节点全部取消选择&&&&&&&& /// &/summary&&&&&&&&& /// &param name="node"&&/param&&&&&&&&& /// &param name="state"&&/param&&&&&&&&& private void SetCheckedChildNodes(TreeListNode node, CheckState check)&&&&&&&& {&&&&&&&&&&&& for (int i = 0; i & node.Nodes.C i++)&&&&&&&&&&&& {&&&&&&&&&&&&&&&& node.Nodes[i].CheckState =&&&&&&&&&&&&&&&& SetCheckedChildNodes(node.Nodes[i], check);&&&&&&&&&&&& }&&&&&&&& }
② .某节点的子节点全部选择时,该节点选择;某节点的子节点未全部选择时,该节点不选择
代码如下:/// &summary&&&&&&&&& /// 某节点的子节点全部选择时,该节点选择&& 某节点的子节点未全部选择时,该节点不选择&&&&&&&& /// &/summary&&&&&&&&& /// &param name="node"&&/param&&&&&&&&& /// &param name="check"&&/param&&&&&&&&& private void SetCheckedParentNodes(TreeListNode node, CheckState check)&&&&&&&& {&&&&&&&&&&&& if (node.ParentNode != null)&&&&&&&&&&&& {&&&&&&&&&&&&&&&& CheckState parentCheckState = node.ParentNode.CheckS&&&&&&&&&&&&&&&& CheckState nodeCheckS&&&&&&&&&&&&&&&& for (int i = 0; i & node.ParentNode.Nodes.C i++)&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&& nodeCheckState = (CheckState)node.ParentNode.Nodes[i].CheckS&&&&&&&&&&&&&&&&&&&& if (!check.Equals(nodeCheckState))//只要任意一个与其选中状态不一样即父节点状态不全选&&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&& parentCheckState = CheckState.U&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&& parentCheckState =//否则(该节点的兄弟节点选中状态都相同),则父节点选中状态为该节点的选中状态&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&& node.ParentNode.CheckState = parentCheckS&&&&&&&&&&&&&&&& SetCheckedParentNodes(node.ParentNode, check);//遍历上级节点&&&&&&&&&&&& }&&&&&&&& }
上两步写好了,别忘了上面的两个方法在TreeList_AfterCheckNode里面触发:
代码如下:private void tlOffice_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e){&&& SetCheckedChildNodes(e.Node, e.Node.CheckState);&&& SetCheckedParentNodes(e.Node, e.Node.CheckState);}
3.获取选中的复选框数据列表
代码如下:private List&int& lstCheckedOfficeID = new List&int&();//选择局ID集合&&&&&&&&&&& /// &summary&&&&&&&&& /// 获取选择状态的数据主键ID集合&&&&&&&& /// &/summary&&&&&&&&& /// &param name="parentNode"&父级节点&/param&&&&&&&&& private void GetCheckedOfficeID(TreeListNode parentNode)&&&&&&&& {&&&&&&&&&&&& if (parentNode.Nodes.Count == 0)&&&&&&&&&&&& {&&&&&&&&&&&&&&&&//递归终止&&&&&&&&&&&& }&&&&&&&&&&&& foreach (TreeListNode node in parentNode.Nodes)&&&&&&&&&&&& {&&&&&&&&&&&&&&&& if (node.CheckState == CheckState.Checked)&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&& DataRowView drv = tlOffice.GetDataRecordByNode(node) as DataRowV&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //关键代码,就是不知道是这样获取数据而纠结了很久(鬼知道可以转换为DataRowView啊)&&&&&&&&&&&&&&&&&&&& if (drv != null)&&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&& int OfficeID = (int)drv["OfficeID"];&&&&&&&&&&&&&&&&&&&&&&&& lstCheckedOfficeID.Add(OfficeID);&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&& GetCheckedOfficeID(node);&&&&&&&&&&&& }&&&&&&&& }
下面测试获取主键列表:
代码如下:private void btnCheck_Click(object sender, EventArgs e)&&&&&&&& {&&&&&&&&&&&& this.lstCheckedOfficeID.Clear();&&&&&&&&&&&& if (tlOffice.Nodes.Count & 0)&&&&&&&&&&&& {&&&&&&&&&&&&&&&& foreach (TreeListNode root in tlOffice.Nodes)&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&& GetCheckedOfficeID(root);&&&&&&&&&&&&&&&& }&&&&&&&&&&&& }&&&&&&&&&&&& string idStr = string.E&&&&&&&&&&&& foreach (int id in lstCheckedOfficeID)&&&&&&&&&&&& {&&&&&&&&&&&&&&&& idStr += id + " ";&&&&&&&&&&&& }&&&&&&&&&&&& MessageBox.Show(idStr);&&&&&&&& }
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行TreeView遍历获取子节点复选框选中的值(asp.net)
[问题点数:60分,结帖人lyc1992_08]
TreeView遍历获取子节点复选框选中的值(asp.net)
[问题点数:60分,结帖人lyc1992_08]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2014年10月 Web 开发大版内专家分月排行榜第三2014年6月 .NET技术大版内专家分月排行榜第三
2014年10月 Web 开发大版内专家分月排行榜第三2014年6月 .NET技术大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。C#treeview复选框判断是否选中
[问题点数:40分,结帖人liangzhl]
C#treeview复选框判断是否选中
[问题点数:40分,结帖人liangzhl]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2010年 总版技术专家分年内排行榜第一2009年 总版技术专家分年内排行榜第一
2011年 总版技术专家分年内排行榜第二
本帖子已过去太久远了,不再提供回复功能。&&&&& 作为一个常用的的Control,TreeView控件给了我们很多的展现层次数据源的能力,其强大的定制性和易用性,非常受客户端应用程序开发者们的亲莱。不过在展现树形控件前面的CheckBox控件的状态时,我们有时或者需要遍历整棵树来得到所有的CheckBox的设置状态。
在示例代码之前,我们先来展示一下相关的类型:
& 1、 TreeView类
& public class
&& //设置树中的CheckBox的选中之前和之间触发的事件
&&&&&& public event
public event
//设置CheckBoxes启用状态,代码级使用
&&&&&& public
&&&&&& //得到当前子节点的最高层的父结点
&&&&&& public
&& 2、 TreeNode类:
public class
&&& //当前结点的CheckBox状态
//附加特殊信息
//遍历结点链表的属性
&& 现在我们就可以通过上面这两个类提供的相关的属性和方法来操作TreeView中的CheckBox了。
&&& 我们要得到所有的选中的CheckBox的信息。这里我们为了使用的方便,我们在TreeView的结点中用Tag来附加了CheckBox是否选中的标识信息。如图所示
&& 关键步骤分解:
&& 1、 添加AfterCheck事件以设置TreeNode的CheckBox状态
&& 如果用户选中CheckBox就设置TreeNode的Tag为&True&,否则置为空,代码如:
Private void nodeTree_AfterCheck(object sender, TreeViewEventArgs e){
TreeNode node = e.N
if (node.Tag== null)
node.Tag =//附加结点信息
node.Tag = null;}
&&2、 搜索TreeView的根结点
&&& 由于TreeView的TopNode属性可以得到当前选中结点的顶级结点,所以我们可以通过它向前遍历而得到根结点,代码如:
TreeNode node= nodeTree.TopN//得到TreeView的根结点,注意根结点只有一个
//每次搜寻到根结点
while (node.PrevNode != null)
node = node.PrevN
3、 遍历所有的树结点,以期得到相应的状态
&&& 这里为了示例的方便我们没有采用从数据库中获取数据的方式,而在用了自带的XML数据源,而且为了显示状态我们以MessageBox的方式来呈现结果给用户。【这里采用了树的递归算法】相关代码如下:
private void TraversNodes(TreeNode parent){
TreeNode node =
if (node != null){
if(node.Tag !=null&&node.Tag.ToString ()==tag )
nodesTag.AppendFormat("node:{0} has checked\n", node.Name);
//对树进行递归遍历
if(node.FirstNode !=null ){
TraversNodes(node.FirstNode);
if (node.NextNode !=null ){
TraversNodes(node.NextNode);
结果如图:
& 这里只是对TreeView这处内置控件的遍历算法一种相对简单的示例,因为在网上没有找到相关的资料,所以写出来给需要的朋友一个参考。
Views(...) Comments()深入浅出Hadoop实战开发(...
255610人喜欢
Google Android移...
154764人喜欢
基于ASP.NET MVC+L...
152865人喜欢
基于J2EE+JBPM3.x/...
141957人喜欢
基于.net平台remotin...
129310人喜欢
基于云计算Saas平台下的C2...
120302人喜欢
基于J2EE平台下的strut...
115626人喜欢
北风网--asp.net版本文...
114970人喜欢
李炎恢PHP第二季系列课程(配...
110112人喜欢
Oracle11g最佳培训高清...
109612人喜欢
castlehunter**5分钟前
beilaozai**5分钟前
wk5454**6分钟前
avkojwer1**10分钟前
yinlanhao**15分钟前
luyongqiang2011**18分钟前
iorchestra**21分钟前
wzp1215**22分钟前
whisperbin**25分钟前
晃晃**25分钟前
晃晃**26分钟前
kllsi**31分钟前
coolwyh**36分钟前
zz**41分钟前
lthsj**46分钟前
benz1979**49分钟前
qxs_ks**51分钟前
smalldoctor**52分钟前
**57分钟前
longhill571**59分钟前
> 关于Winform下,获取Treeview中CheckBox选中项的技巧
接下来,我们就开始去处理AfterCheck事件,让程序能够&记住&我们选择过的项目。无论大家有没有看过那篇文章,其中提到过&树的递归算法&,关于算法,大家可以参考如下这个链接:
在了解完算法后,相信大家能离家如下一段的代码了吧:这里就照搬这位博友的code了
private void TraversNodes(TreeNode parent)
TreeNode node =
if (node != null)
if (node.Tag != null && node.Tag.ToString() == tag)
nodesTag.AppendFormat(&node:{0} has checked\n&, node.Text);
if (node.FirstNode != null)////如果node节点还有子节点则进入遍历
TraversNodes(node.FirstNode);
if (node.NextNode != null)////如果node节点后面有同级节点则进入遍历
TraversNodes(node.NextNode);
AfterCheck事件代码:
treeView1_AfterCheck
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
if (e.Action != TreeViewAction.Unknown)
TreeNode node = e.N
if (node.Tag == null)
node.Tag =//附加结点信息
node.Tag = null;
CheckAllChildNodes(e.Node, e.Node.Checked);
//选中父节点
bool bol = true;
if (e.Node.Parent != null)
for (int i = <span style="color: #; i & e.Node.Parent.Nodes.C i++)
if (!e.Node.Parent.Nodes[i].Checked)
bol = false;
e.Node.Parent.Checked =
////记得如果父节点被选中或取消,记得设置它的tag哦
e.Node.Parent.Tag =
e.Node.Parent.Tag = null;
这个方法的调用时机应该是什么时候呢?对于我的场景来说,应该是再点击那个业务按钮之后,在之前,我们的AfterCheck事件代码唯一要做的事情就是如下图所示的一个流程:
当我们点击业务按钮之后,为其添加如下代码即可:
private void button1_Click_1(object sender, EventArgs e)
nodesTag = new StringBuilder();
TreeNode node = treeView1.TopN//得到TreeView的根结点,注意根结点只有一个
//每次搜寻到根结点
while (node.PrevNode != null)
node = node.PrevN
TraversNodes(node);//遍历根结点
MessageBox.Show(nodesTag.ToString());
再好一点:
到这里呢,按理说问题已经被解决完了。我们获取到了选中的部门,但是,按照常规来说,应该&选中节点的时候,如果节点存在子节点,可以选中全部的子节点;如果取消一个节点的选中状态,当前节点同时又存在父节点的话,就取消父节点的选中状态&,怎么办呢?
我觉得自己很懒,&搜&的一下,给大家链上一篇文章,我觉得写的很不错啊,如下:
好啦,根据原文的意思,我们结合之前的获取选中状态的代码,修改如下:
新的AfterCheck
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
if (e.Action != TreeViewAction.Unknown)
TreeNode node = e.N
if (node.Tag == null)
node.Tag =//附加结点信息
node.Tag = null;
CheckAllChildNodes(e.Node, e.Node.Checked);
//选中父节点
bool bol = true;
if (e.Node.Parent != null)
for (int i = <span style="color: #; i & e.Node.Parent.Nodes.C i++)
if (!e.Node.Parent.Nodes[i].Checked)
bol = false;
e.Node.Parent.Checked =
////记得如果父节点被选中或取消,记得设置它的tag哦
e.Node.Parent.Tag =
e.Node.Parent.Tag = null;
新的CheckAllChildNodes方法:
根据博友Flynn2009的提示,应该注意代码需要有修改,如下:
node.Tag = nodeChecked ? (bool)tag :
新的CheckAllChildNodes
private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
foreach (TreeNode node in treeNode.Nodes)
node.Checked = nodeC
node.Tag =////记得在这里为选中的项目设置tag属性
if (node.Nodes.Count & <span style="color: #)
this.CheckAllChildNodes(node, nodeChecked);
好啦,在这里呢,我们就完成了获取Treeview中CheckBox选中状态的小例子,并且呢,还人性化的设置了一个关于父子选项的效果。文章就到这里为止吧,希望能给大家带来收获。欢迎拍砖!!!
最后附上本文的示例项目代码:Vs2008+.Net 2.0
北风网,中国IT网络教育第一品牌!
公司:上海育创网络科技有限公司
地址:上海浦东新区世纪大道1500号东方大厦1325室
电话:400-018-6216}

我要回帖

更多关于 jquery复选框选中 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信