Devexpress TreeList

本文深入探讨了 DevExpress TreeList 的优化绑定方式、验证列内容不为空、删除节点、锁定绑定行、自定义编辑权限等关键操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[一篮饭特稀原创,转载请注明出处http://www.cnblogs.com/wanghafan/archive/2012/02/09/2344253.html]

--Devexpress TreeList 判断空

View Code
 1 repositoryItemTextEdit_费用名称是TreeList的某一列:
2
3 /// 验证不为空_WHF_111201
4
5 /// </summary>
6
7 /// <param name="sender"></param>
8
9 /// <param name="e"></param>
10
11 private void repositoryItemTextEdit_费用名称_Validating(object sender, CancelEventArgs e)
12
13 {
14
15 if (sender != null)
16
17 {
18
19 DevExpress.XtraEditors.TextEdit txt = sender as DevExpress.XtraEditors.TextEdit;
20
21 if (txt != null)
22
23 {
24
25 if (string.IsNullOrEmpty(txt.Text))
26
27 e.Cancel = true;
28
29 }
30
31 }
32
33 }

--Devexpress TreeList 绑定 方式 速度 优化 

View Code
 1 首先考虑代码中的字符串比较是否使用到 "==" 符号,该符号在string的比较中非常耗性能,如果存在则需要全部修改成 "Equal()"
2
3 按照如上修改后一般速度有显著飞跃,如果还是很卡,参照如下方法:
4
5 Devexrepss Treelist 常用绑定方式有两种:
6
7 1.直接treeList.DataSource=dt;
8
9 2.使用AppendNode逐条添加
10
11 优缺点:
12
13 1.绑定方便,但是速度很慢,特别表现在最大化最小化和关闭的时候,巨卡无比
14
15 2.绑定复杂,但是速度很快,推荐使用
16
17 下面贴出速度较快的第二种参考代码:
18
19 TreeListNode parentNode = null;
20 TreeListNode childNode = null;
21
22 treeList.BeginUnboundLoad();
23 treeList.ClearNodes();
24
25 DataView treeDv = dt_F_表二费用表.DefaultView;
26 DataTable parentDt = null;
27 DataTable childDt = null;
28 parentDt = treeDv.ToTable();
29 foreach (DataRow parentDr in parentDt.Rows)
30 {
31 parentNode = this.treeList.AppendNode(new object[] { parentDr["IID"], parentDr["上级费用ID"] }, 0);
32
33 treeDv = new DataView(dt_F_表二费用表);
34 treeDv.RowFilter = "上级费用ID='" + parentDr["IID"].ToString() + "'";
35 childDt = treeDv.ToTable();
36 foreach (DataRow childDr in childDt.Rows)
37 {
38 childNode = this.treeList.AppendNode(new object[] { childDr["IID"], childDr["上级费用ID"] }, parentNode);
39 }
40 }
41
42 treeList.EndUnboundLoad();
43 treeList.ExpandAll();

--Devexpress TreeList 删除 

View Code
 1  treeList_Project是TreeList,无论点击3级节点的某个节点,都可以把根节点一起删除
2
3 private void btn_RemoveProject_Click(object sender, EventArgs e)
4 {
5 if (treeList_Project.FocusedNode == null)
6 return;
7 TreeListNode keyNode=null;
8 switch (treeList_Project.FocusedNode.Level)
9 {
10 case 0:
11 keyNode = treeList_Project.FocusedNode;
12 break;
13 case 1:
14 keyNode = treeList_Project.FocusedNode.ParentNode;
15 break;
16 case 2:
17 keyNode = treeList_Project.FocusedNode.ParentNode.ParentNode;
18 break;
19 }
20 treeList_Project.Nodes.Remove(keyNode);
21 }

--Devexpress TreeList 绑定后 锁定 绑定前 行

View Code
1  int currFocusedRow = treeList_left.GetNodeIndex(treeList_left.FocusedNode);
2
3 //--绑定Binding刷新treeList
4
5 treeList_left.FocusedNode = treeList_left.GetNodeByVisibleIndex(currFocusedRow);

--Devexpress TreeList Check一二级可编辑其他级不可编辑

View Code
 1 代码界面:
 2 private void treeList_CustomNodeCellEdit(object sender, DevExpress.XtraTreeList.GetCustomNodeCellEditEventArgs e)
 3           {
 4               if (e.Node.Level == 0 || e.Node.Level == 1 || e.Node.Level == 2)
 5               {
 6                   if (e.Column.FieldName == "ItGet")
 7                   {
 8                       e.RepositoryItem = repositoryItemCheckEdit_ItGet_0;                    
 9                   }
10                   else
11                   {
12                       e.RepositoryItem = repositoryItemTextEdit_ReadOnly;
13                   }
14               }
15               else
16               {
17                   if (e.Column.FieldName == "ItGet")
18                   {
19                       e.RepositoryItem = repositoryItemCheckEdit_ItGet_1;                    
20                   }
21               }
22          }
23   
24 设计页面:
25 
26   this.repositoryItemCheckEdit_ItGet_1.CheckStyle = DevExpress.XtraEditors.Controls.CheckStyles.Standard;
27   
28   this.repositoryItemCheckEdit_ItGet_0.CheckStyle = DevExpress.XtraEditors.Controls.CheckStyles.UserDefined;
29   this.repositoryItemCheckEdit_ItGet_0.ReadOnly = true;
30   this.repositoryItemCheckEdit_ItGet_0.AllowFocused = false;

 

 

 

 

 

 

转载于:https://www.cnblogs.com/wanghafan/archive/2012/02/09/2344253.html

### DevExpress TreeList 控件简介 DevExpress TreeList 是一款强大的第三方控件,适用于 Windows Forms 应用程序。该控件提供了树形结构的数据展示方式,并支持多种交互操作和丰富的自定义选项[^2]。 ### 初始化与基本配置 为了使用 `TreeList` 控件,在设计器中将其拖放到窗体上之后,可以通过属性窗口设置一些基础参数来满足特定需求。比如可以指定列的数量、宽度以及显示字段等基本信息。此外还可以通过编程的方式动态调整这些属性以适应同的应用场景。 ```csharp // 设置根节点可见状态为展开 treeList1.OptionsView.ShowRoot = false; // 启用复选框模式 treeList1.OptionsSelection.MultiSelectMode = TreeListMultiSelectMode.CheckBoxRowSelect; ``` ### 处理节点事件 当用户勾选某个节点时会触发 `AfterCheckNode` 事件,可以在该事件处理函数内执行相应的逻辑业务: ```csharp private void treeList1_AfterCheckNode(object sender, NodeEventArgs e) { var tree = e.Node.TreeList; try { tree.BeginUpdate(); // 更新子节点的选择状态 SetCheckedChildNodes(e.Node, e.Node.CheckState); // 更新父节点的选择状态 SetCheckedParentNodes(e.Node.ParentNode, e.Node.CheckState); } finally { tree.EndUpdate(); } } ``` 此段代码实现了级联选择的效果——即当选定某一个节点时自动同步其所有下级节点的状态;同时也会影响上级节点的半选/全选情况[^3]。 ### 获取已选中的项 如果想要遍历整个树并收集所有被标记为“已选”的项目,则可通过递归的方法实现这一目标: ```csharp public List<TreeListNode> GetSelectedItems(TreeListNode rootNode){ var selectedItems = new List<TreeListNode>(); foreach (var node in rootNode.Nodes) { if ((bool)node.GetValue("IsChecked")) selectedItems.Add(node); // 对于有孩子的节点继续深入查询 if (!node.IsLeaf && node.HasChildren) selectedItems.AddRange(GetSelectedItems(node)); } return selectedItems; } ``` 上述方法接收一个起始节点作为输入参数,并返回由所有符合条件(此处指已被打钩)的叶子结点组成的集合对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值