这一段时间在使用DevExpress 的控件XtraTreeList。借鉴了网上的一些用法,例如说,在每行开始显示CheckBox,并使其有三种选中状态。然后就出现问题了,在获取全部选中的行的时候会出现父节点获取不到的问题。
上图是TreeList的选中状态,通过获取并显示他们各自的KeyFieldName为下图:
对应到第一幅图中就是
通过上述,可以发现,就算父节点是被选中的,例如上图中的美国和俄罗斯两个父节点就没有被选中。问一下还有什么办法可以获取?网上有资料说可以通过Selection进行获取,怎么操作?请各位大牛支招啊!
获取的代码如下:
上图是TreeList的选中状态,通过获取并显示他们各自的KeyFieldName为下图:
对应到第一幅图中就是
通过上述,可以发现,就算父节点是被选中的,例如上图中的美国和俄罗斯两个父节点就没有被选中。问一下还有什么办法可以获取?网上有资料说可以通过Selection进行获取,怎么操作?请各位大牛支招啊!
获取的代码如下:
private List<string> lstCheckedKeyID = new List<string>();//选择局ID集合 /// <summary> /// 获取选择状态的数据主键ID集合 /// </summary> /// <param name="parentNode">父级节点</param> private void GetCheckedKeyID(TreeListNode parentNode) { if (parentNode.Nodes.Count == 0) { return;//递归终止 } foreach (TreeListNode node in parentNode.Nodes) { if (node.CheckState == CheckState.Checked) { DataRowView drv = treeList1.GetDataRecordByNode(node) as DataRowView;//关键代码,就是不知道是这样获取数据而纠结了很久(鬼知道可以转换为DataRowView啊) if (drv != null) { string KeyFieldName = (string)drv["KeyFieldName"]; lstCheckedKeyID.Add(KeyFieldName); } } GetCheckedKeyID(node); } } /// <summary> /// 获取选中的节点 /// </summary> /// <param name="tree"></param> private void findOrigin(DevExpress.XtraTreeList.TreeList tree) { this.lstCheckedKeyID.Clear(); if (tree.Nodes.Count > 0) { foreach (TreeListNode root in tree.Nodes) { GetCheckedKeyID(root); } } }
解决方案
5
https://documentation.devexpress.com/#WindowsForms/CustomDocument2434 本人查吧。checkbox 一般都是2种状态。
是的。一般使用2种状态。
35
Indeterminate 这是父节点的状态
问一下你有没有什么方法可以获取到 全部选中的节点呢?
假如你想获取全部选中的节点 那你把判断条件修改一下
if(this.checkBox1.CheckState!= CheckState.Unchecked)