DEV 控件使用之:TreeList

使用DEV控件也有一段时间了,一直想写点东西。最近又使用到TreeList控件,这个控件对于刚使用的人来说确实不好掌握。我想把自己知道的写下来,让还不熟悉的慢慢学会使用,对于会使用的大家交流下。如果有用的不正确或不恰当的欢迎各位指正批评。

一,第一步从控件库里拖出TreeList

二,设置属性

this.treeList1.OptionsView.ShowCheckBoxes = true;
            this.treeList1.OptionsView.ShowColumns = false;
            this.treeList1.OptionsView.ShowHorzLines = false;
            this.treeList1.OptionsView.ShowIndicator = false;
            this.treeList1.OptionsView.ShowVertLines = false;

三,构造测试数据(参考方法 FrmTreeList_Load)

四,设置选中项(参考方法 SetCheckState )

五,当前操作的节点为某个节点的最后一个子节点时,设置父节点的状态

这里需要一个 事件即:treeList1_AfterCheckNode 这个方法在属性事件里找到。

页面所有代码如下:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Threading.Tasks;
  9 using System.Windows.Forms;
 10 using DevExpress.XtraTreeList.Nodes;
 11
 12 namespace WinForm2
 13 {
 14     public partial class FrmTreeList : DevExpress.XtraEditors.XtraForm
 15     {
 16         public FrmTreeList()
 17         {
 18             InitializeComponent();
 19         }
 20
 21         //初始化方法加载测试数据
 22         private void FrmTreeList_Load(object sender, EventArgs e)
 23         {
 24             DataTable dt = new DataTable();
 25             dt.Columns.Add("ID", typeof(int));
 26             dt.Columns.Add("ItemName", typeof(string));
 27             dt.Columns.Add("ParentID", typeof(int));
 28             DataRow dr = dt.NewRow();
 29             dr["ID"] = 1;
 30             dr["ItemName"] = "根节点";
 31             dr["ParentID"] = -1;
 32             dt.Rows.Add(dr);
 33             DataRow dr2 = dt.NewRow();
 34             dr2["Id"] = 2;
 35             dr2["ItemName"] = "根节点2";
 36             dr2["ParentID"] = 0;
 37             dt.Rows.Add(dr2);
 38             DataRow dr3 = dt.NewRow();
 39             dr3["ID"] = 3;
 40             dr3["ItemName"] = "根节点3";
 41             dr3["ParentID"] = 0;
 42             dt.Rows.Add(dr3);
 43
 44             DataRow dr4 = dt.NewRow();
 45             dr4["ID"] = 4;
 46             dr4["ItemName"] = "子节点1";
 47             dr4["ParentID"] = 1;
 48             dt.Rows.Add(dr4);
 49
 50             DataRow dr5 = dt.NewRow();
 51             dr5["ID"] = 5;
 52             dr5["ItemName"] = "子节点2";
 53             dr5["ParentID"] = 1;
 54             dt.Rows.Add(dr5);
 55
 56             DataRow dr6 = dt.NewRow();
 57             dr6["ID"] = 6;
 58             dr6["ItemName"] = "子节点2";
 59             dr6["ParentID"] = 5;
 60             dt.Rows.Add(dr6);
 61
 62             this.treeList1.DataSource = dt;
 63
 64             //这里是用来测试的节点
 65             selectItem.Add("子节点1");
 66             selectItem.Add("根节点2");
 67             // 设置初始状态
 68             SetCheckState();
 69
 70         }
 71
 72         /// <summary>
 73         /// 要被选中的节点
 74         /// </summary>
 75         private List<string> selectItem = new List<string>();
 76
 77         //设置节点的选中状态
 78         private void SetCheckState()
 79         {
 80             foreach (TreeListNode n in treeList1.Nodes)
 81             {
 82                 DataRowView drv = (DataRowView)treeList1.GetDataRecordByNode(n);
 83                 string nodeName = string.Empty;
 84                 if (drv != null)
 85                 {
 86                     nodeName = drv["ItemName"] != null ? Convert.ToString(drv["ItemName"]) : "";
 87                 }
 88                 bool checkd = selectItem.Contains(nodeName);
 89                 if (checkd)
 90                     n.CheckState = CheckState.Checked;
 91                 //如果当前结点有子结点集合,再枚举所有子结点
 92                 if (n.HasChildren)
 93                     this.SetChildNodeState(n);
 94             }
 95
 96         }
 97
 98         /// <summary>
 99         /// 设置子节点状态
100         /// </summary>
101         /// <param name="parentNode"></param>
102         private void SetChildNodeState(TreeListNode parentNode)
103         {
104             foreach (TreeListNode n in parentNode.Nodes)
105             {
106                 DataRowView drv = (DataRowView)treeList1.GetDataRecordByNode(n);
107                 string nodeName = string.Empty;
108                 if (drv != null)
109                 {
110                     nodeName = drv["ItemName"] != null ? Convert.ToString(drv["ItemName"]) : "";
111                 }
112                 bool checkd = selectItem.Contains(nodeName);
113                 if (checkd)
114                 {
115                     parentNode.CheckState = CheckState.Checked;
116                     n.CheckState = CheckState.Checked;
117                 }
118                 if (n.HasChildren)
119                     this.SetChildNodeState(n);
120             }
121         }
122
123
124
125         //节点选中后处理
126         private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
127         {
128             SetChildrenNodeState(e.Node, e.Node.CheckState);
129             SetParentNode(e.Node);
130         }
131
132         //设置父节点的状态
133         private void SetChildrenNodeState(TreeListNode node, CheckState state)
134         {
135             node.CheckState = state;
136             if (node.HasChildren)
137             {
138                 SetChildNodeState(node, state);
139             }
140         }
141         //设置子节点的状态(当选中父节点时所有的子节点也要选中)
142         private void SetChildNodeState(TreeListNode node, CheckState state)
143         {
144             foreach (TreeListNode item in node.Nodes)
145             {
146                 item.CheckState = state;
147                 if (item.HasChildren)
148                 {
149                     SetChildNodeState(item, state);
150                 }
151             }
152         }
153
154         //检查节点是否是最后一个被选中或取消的子节点,如果是要对父节点进行设置(选中或不选中)
155         private void SetParentNode(TreeListNode node)
156         {
157             if (node.ParentNode != null)
158             {
159                 bool state = true;
160                 foreach (TreeListNode item in node.ParentNode.Nodes)
161                 {
162                     if (item.CheckState != node.CheckState)
163                     {
164                         state = false;
165                         break;
166                     }
167                 }
168                 if (state)
169                 {
170                     node.ParentNode.CheckState = node.CheckState;
171                 }
172             }
173         }
174     }
175 }

时间: 2024-10-13 04:40:28

DEV 控件使用之:TreeList的相关文章

dev 控件之 gridcontrid 应用

一.gridview 新增一行有两种: 1.gridView.AddNewRow()然后在gridView_InitNewRow事件里面填写新添加行的数据. private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e) //添加一行后触发事件,赋值 { ColumnView View = sender as ColumnView; View .SetRo

DEV控件之ASPxTextBox 的使用

ASPxTextBox与普通的TextBox相比,最大的特点就是对输入格式的验证,只需要对ASPxTextBox的ValidationSettings属性进行配置,通过配置ValidationExpression的正则表达式的值来对输入的值进行验证,通过改变RequiredField的IsRequired属性值来改变ASPxTextBox是否允许为空,具体代码和效果图如下.顺便说下,ASPxTextBox并没有类似于TextBox的TextMode属性,而是有一个单独的ASPxMemo控件可以支

C# WinForm 时间控件(DEV控件)

此处收集一些关于时间控件(DevExpress.XtraEditors.DateEdit())的一些基本设定方式: 1. 默认显示当前日期: a. 在某些情况下(还未明朗),在 form.Designer.cs 中,将该控件的EditValue赋null值: this.detoBeginTime.EditValue = null; b. 若设定上述方式后,仍无法显示默认时间,可再页面加载.窗体初始化时,初始化控件的值: detoBeginTime.Text = DateTime.Now.ToSt

DEV控件Grid显示行号

DEV控件Grid的显示行号需要通过一个事件来设置,具体设置代码为: private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e) { if (e.Info.IsRowIndicator && e.RowHandle >= 0) { e.Info.DisplayText = Convert.To

DEV控件的Gridview1

DEV控件的Gridview小技巧总结 1.设置Gridview控件的某列不可编辑 this.gridData.gridView1.Columns["change_date"].OptionsColumn.AllowEdit = false; 字段:change_date是数据库中字段,是绑定到gridview上的. 2.设置Gridview控件整体不可编辑 this.gridData.IsEnableEdit = false; this.gridView1.OptionsBehavi

DEV控件:gridControl常用属性设置(转)

DEV控件:gridControl常用属性设置    1.隐藏最上面的GroupPanel   gridView1.OptionsView.ShowGroupPanel=false;    2.得到当前选定记录某字段的值   sValue=Table.Rows[gridView1.FocusedRowHandle][FieldName].ToString();   3.数据只读   gridView1.OptionsBehavior.Editable=false;   4.不显示MasterDe

VS中Dev控件在工具箱里的不见的解决办法

出现问题:调整了VS中Dev控件后(以免生成程序每次都要在客户机上面注册dev),之前安装的DEV控件在vs工具箱中消失了,重装可以解决,但是太费时间了,检测dev自带的设置,找到了解决办法. 解决办法: 使用DEV自带的ToolboxCreator 即可解决. 位置:开始-->程序-->Developer Express v2011 vol1(依据自己的版本)-->SetUp-Components-->Tools-->ToolboxCreator 点击运行即可自动修复 注意

DevExpress ASP.NET 使用经验谈(9)- Dev控件客户端事件 ClientSideEvents

上一节,已经介绍了ASPxGridView的自定义列和基本事件 ,本节接着将介绍Dev控件的客户端事件模型. 在上节示例基础上,我们增加一行菜单,使用Dev的ASPxMenu来实现,如下图所示. 图一 添加菜单的界面 增加菜单的代码如下: <dx:ASPxMenu ID="ASPxMenu1" runat="server" RenderMode="Lightweight" Width="100%" ItemAutoWid

DEV控件:gridControl常用属性设置【转载】

DEV控件:gridControl常用属性设置  1.隐藏最上面的GroupPanel   gridView1.OptionsView.ShowGroupPanel=false;  2.得到当前选定记录某字段的值   sValue=Table.Rows[gridView1.FocusedRowHandle][FieldName].ToString(); 3.数据只读   gridView1.OptionsBehavior.Editable=false; 4.不显示MasterDetailView