转载

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 这个方法在属性事件里找到。

页面所有代码如下:

DEV 控件使用之:TreeList
  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 }
View Code
正文到此结束
Loading...