Devexpress treeList
1.数据绑定最基本的两个属性:KeyFieldName和ParentFieldName。
SELECT OfficeID,OfficeName,ParentOfficeID FROM tOffice

这种数据库设计是比较常见的,一般数据满足树形关系就可以这样设计。绑定数据时,只需指定DataSource为对应 的DataTable,指定KeyFieldName为表主键字段,ParentFieldName为表指向主键的外键字段名。
private void BindData()
{
this.tlOffice.DataSource = dtOffice;
tlOffice.KeyFieldName = "OfficeID";
//tlOffice.DataMember = "OfficeName";
tlOffice.Columns["OfficeName"].Caption = "局名称";
tlOffice.ParentFieldName = "ParentOfficeID";
}
邦定如下:
为让数据不可编辑,需将OPtionsBehavior→Editable属性设为False:

/// <summary>
/// 选择某一节点时,该节点的子节点全部选择 取消某一节点时,该节点的子节点全部取消选择
/// </summary>
/// <param name="node"></param>
/// <param name="state"></param>
private void SetCheckedChildNodes(TreeListNode node, CheckState check)
{
for (int i = ; i < node.Nodes.Count; i++)
{
node.Nodes[i].CheckState = check;
SetCheckedChildNodes(node.Nodes[i], check);
}
}
设置settingsselection.enabled的属性为true可以在节点前面显示复选框。可以选中或取消选中这些复选框来选择或取消相应的节点。
要选择所有节点,即全选,设置settingsselection.allowselectall的属性为True。
当选择某节点后,需将其子节点同时选中,需设置SettingsSelection.Recursive为True。
/// <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.CheckState;
CheckState nodeCheckState;
for (int i = ; i < node.ParentNode.Nodes.Count; i++)
{
nodeCheckState = (CheckState)node.ParentNode.Nodes[i].CheckState;
if (!check.Equals(nodeCheckState))//只要任意一个与其选中状态不一样即父节点状态不全选
{
parentCheckState = CheckState.Unchecked;
break;
}
parentCheckState = check;//否则(该节点的兄弟节点选中状态都相同),则父节点选中状态为该节点的选中状态
} node.ParentNode.CheckState = parentCheckState;
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);
}
效果如图:
获取选中的复选框数据列表
private List<int> lstCheckedOfficeID = new List<int>();//选择局ID集合
/// <summary>
/// 获取选择状态的数据主键ID集合
/// </summary>
/// <param name="parentNode">父级节点</param>
private void GetCheckedOfficeID(TreeListNode parentNode)
{
if (parentNode.Nodes.Count == )
{
return;//递归终止
} foreach (TreeListNode node in parentNode.Nodes)
{
if (node.CheckState == CheckState.Checked)
{
DataRowView drv = tlOffice.GetDataRecordByNode(node) as DataRowView;//关键代码,就是不知道是这样获取数据而纠结了很久(鬼知道可以转换为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 > )
{
foreach (TreeListNode root in tlOffice.Nodes)
{
GetCheckedOfficeID(root);
}
} string idStr = string.Empty;
foreach (int id in lstCheckedOfficeID)
{
idStr += id + " ";
}
MessageBox.Show(idStr);
}
获取主键如图:

本文总结来源: http://www.cnblogs.com/sndnnlfhvk/archive/2011/05/15/2046920.html
Devexpress treeList的更多相关文章
- Devexpress TreeList控件绑定显示父子节点对像
今天一位同事咨询Devexpress TreeList控件绑定自动显示父子节点对像,但结果是不会显示带父子节点关系,而是将所有的节点作为父节点显示出来了,对像类的代码如下 public class I ...
- 如何让DevExpress TreeList的每个结点高亮显示?
概述:如何让DevExpress TreeList的每个节点高亮显示? 如何让DXperience TreeList的每个节点高亮显示? 效果如下: private void treeList1_Cu ...
- How to easily create popup menu for DevExpress treelist z
http://www.itjungles.com/how-to-easily-create-popup-menu-for-devexpress-treelist.html Adding popup m ...
- DevExpress TreeList使用教程之绑定多级树
DevExpress TreeList使用教程之绑定多级树 概述:TreeList控件可以同时显示树结构和其他数据列,即在一个列上建立父子关系展开或收缩,同时还可以显示其他列的内容.在TreeLi ...
- DevExpress TreeList 全选和反选 z
/// <summary> /// 全选树 /// </summary> /// <param name="tree">树控件</para ...
- Devexpress treelist 树形控件 实现带三种状态的CheckBox
树形控件是使用频率很高的一种控件.对于属性控件往往需要下面两个功能 1.TreeList带有CheckBox,并且节点要有三种状态(所有的子节点都选中,所有的子节点都没选择,一部分子节点选中).使用 ...
- Devexpress TreeList选择父级联动
Treelist当显示复选框后,父级和子级的复选框没有关联,使用过程中很不便,如图所示 自己给treelist添加父子级联动 /// <summary> /// 初始化TreeList,父 ...
- DevExpress TreeList 拖动时中如何判断源节点作为目标节点的子节点还是兄弟节点
目的:只允许同级拖动. 两个判断: 1.原节点(假设为:S)的父级如果不等于目标节点(假设为:T)的父节点,那么发生了跨级,即非同级移动.这个判断很容易. 2.S.T是同一级的,但是S是移动到T下一级 ...
- Devexpress TreeList 展开和折叠当前选中节点
1.展开: private void barButtonItem6_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) ...
- DevExpress TreeList用法总结
http://blog.itpub.net/29251214/viewspace-774395/ http://blog.csdn.net/czp_huster/article/details/501 ...
随机推荐
- Android Studio accelerator key(shortcut)& Basic knowledge
shift + F6 重构(选文件,ok->下面的控制台,do refactor option + return 快速修复 Activity@Extra() Intent: @FragmentA ...
- struts2 No result defined for action XXX and result input
这种错误的原因一般是页面的属性和action里的属性个数.名称.类型不一致造成的 困扰了我一下午的问题,原来是表单中有两个input-text的name属性重复了,然后接受参数的时候就出现了这个错误 ...
- mysql安装时到最后start service时就不响应了的解决方法
- Ubuntu16.04 VTK7.1.0+QT4.8.6+QtCreator开发环境配置
VTK需要OpenGL3.0或更高版本的驱动,但虚拟机下的Ubuntu不支持OpenGL3.0,或者自己按网上教程配置之后也能支持,但过程相当繁琐,本人试验失败. 最终决心采用双系统,装好之后,执行g ...
- vim 使用技巧记录
vim 使用技巧记录 1.批量注释与取消注释 命令格式:起始行号,结束行号s#^#//#g 例如: 注释代码3到15行,"//"可以是其他的"" :3,15s# ...
- CrashMonkey4IOS App测试
下载地址:https://github.com/vigossjjj/CrashMonkey4IOS 根据下载地址里面的说明安装一下,以下进行配置 1.进入CrashMonkey4IOS-master/ ...
- JAVA 中配置IKAnalyzer扩展词库和停止词库
1.后缀名.dic的词典文件,必须如使用文档里所说的 无BOM的UTF-8编码保存的文件.如果不确定什么是 无BOM的UTF-8编码,最简单的方式就是 用Notepad++编辑器打开,Encoding ...
- 实现移动设备远程登录linux服务器
明天下午要考试了.所以最近时间有点紧,都在忙着看矩阵课本,刷刷题. 回到我们博客题目内容,最近正在看linux,之前是通过在笔记本上装着虚拟机的方法来进行操作. 之后发现一些能够进一步改进的地方,首先 ...
- Centos7学习之静态IP设置方法介绍
1.编辑 ifcfg-eth0 文件,vim 最小化安装时没有被安装,需要自行安装不描述. # vim /etc/sysconfig/network-scripts/ifcfg-eth0 2.修改 ...
- oracle sql 执行计划分析
转自http://itindex.net/detail/45962-oracle-sql-%E8%AE%A1%E5%88%92 一.首先创建表 SQL> show user USER is &q ...