DevExpress控件的treeList完整小案例

这篇内容对刚接触treeList的程序员来说,会有一定的帮助。

以下会以一个小案例来讲解treeList的一些属性方法及事件

这是程序的窗体,frmTableMaintenance为窗体名,而groupControl1是一个分组控件,添加和修改都是 用同一个分组,也就是说,不管是添加还是修改,用的都是同一个页面,而button跟随操作的变化而变化

首先,加载树,即将数据绑定到treeList中

 1  /// <summary>
 2         /// 加载树
 3         ///tl_TableMaintain是treeList的名称      ///对于绑定数据,treeList有自带的,可以不用自己去递归。直接指定KeyFieldName(主键),ParentFieldName(父键),以及tag值。
 4         /// </summary>
 5         public void LoadTree()
 6         {
 7             try
 8             {
 9                 this.tl_TableMaintain.Nodes.Clear();//清空所有节点,以便重新加载
10
11                 ResultBase _arryTableName = Global.Get("System/GetTableMaintain");
12
13                 if (_arryTableName != null)
14                 {
15                     _snList = (List<erp_dev_table>)JsonConvert.DeserializeObject(_arryTableName.Result, typeof(List<erp_dev_table>));//数据源 snList ,这里获取数据源的方式可自由定义
16
17                 }
18                 TreeListNode node = tl_TableMaintain.AppendNode(null, -1);
19                 node.SetValue(treeListColumn1, "表结构维护");
20                 LoadTreeCtrl(node, "-1");
21                 TreeListProperty(tl_TableMaintain);//调用方法,设置属性
22             }
23             catch (Exception ex)
24             {}
25         }
26
27
28         private void LoadTreeCtrl(TreeListNode pnode, string parentkey)
29         {
30             try
31             {
32                 int index = 0;
33                List<erp_dev_table> dv = _snList.Where(o => o.parent_key.Trim() == parentkey.Trim()).ToList();//根据父级id获取子节点循环加载
34                 foreach (erp_dev_table rv in dv)
35                 {
36                     TreeListNode node = pnode.TreeList.AppendNode(rv.table_key, pnode);
37                     node.SetValue(0, rv.table_name_english);
38                     node.Tag = rv;
39                     LoadTreeCtrl(node, Command.Instance.Getstring(rv.table_key));
40                 }
41             }
42             catch (Exception ex)
43             {
44             }
45         }
46
47
48
49
50
51
52         /// <summary>
53         /// 设置treeList的属性
54         /// </summary>
55         /// <param name="tl"></param>
56         private void TreeListProperty(TreeList tl)
57         {
58             tl.OptionsView.ShowColumns = false;//是否显示选中的行
59             tl.OptionsBehavior.Editable = false;//不可编辑
60             tl.OptionsView.ShowHorzLines = false;//OptionsView提供对树状列表的显示选项,设置水平线是否显示
61             tl.OptionsView.ShowIndicator = false;//节点的指示面板是否显示
62             tl.OptionsView.ShowVertLines = false;//垂直线条是否显示
63             //设置treeList的折叠样式为 +  - 号
64             tl.LookAndFeel.UseDefaultLookAndFeel = false;
65             tl.LookAndFeel.UseWindowsXPTheme = true;
66             tl.OptionsSelection.InvertSelection = true;//聚焦的样式是否只适用于聚焦细胞或所有细胞除了聚焦对象,失去焦点后
67           }
68
69 

然后,单击或双击树节点时,加载该节点对象的详细信息,如图:

如果树里面的节点 较多,可以采取查询的方法定位到该节点上。如图中的查询框一样,当点击查询时,查看数据库中是否存在该对象,若存在,则将焦点定位到该节点上,反之,则提示输入的对象不存在!如图:

代码如下:

 1  /// <summary>
 2         /// 点击查询,查出相应的
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>
 6         private void btn_selectTName_Click(object sender, EventArgs e)
 7         {
 8              tName = txt_name.Text.Trim();
 9             if (!String.IsNullOrEmpty(tName))
10             {
11
12                 GetTMByName();
13                 btn_saveOrUpdate.Text = "修改";
14             }
15             else
16             {
17                 Global.ShowMeg(Command.MsgType.Warning, "请填写您要查询的表名");
18                 this.txt_name.Focus();
19             }
20         }
21
22         /// <summary>
23         /// 迭代找到节点
24         /// </summary>
25         /// <param name="node"></param>
26         /// <param name="text"></param>
27         /// <returns></returns>
28         private TreeListNode  forNode(TreeListNode node, string text)
29         {
30             erp_dev_table tableOne = (erp_dev_table)node.Tag;
31             if (tableOne!=null)
32             {
33                 if (tableOne.table_name_english==text)
34                 {
35                     return node;
36                 }
37
38             }
39             // 循环父节点下的所有子节点
40             foreach (TreeListNode n in node.Nodes)
41             {
42
43                 TreeListNode rn = forNode(n, text);
44                 if (rn != null)
45                     return rn;
46
47             }
48             return null;
49         }
50
51
52         public void GetTMByName()
53         {
54             TreeListNode node = forNode(this.tl_TableMaintain.Nodes[0], tName);
55             if (node == null)
56             {
57                 Global.ShowMeg(Command.MsgType.Warning, "您输入有误,当前实体不存在");
58                 return;
59             }
60
61             if (node.ParentNode.Expanded == false)
62             {
63                 node.ExpandAll();
64
65             }
66             this.tl_TableMaintain.FocusedNode = node;
67             BangDing();
68
69
70         }
71
      public void BangDing()         {                       _currNode = (erp_dev_table)tl_TableMaintain.FocusedNode.Tag;            erp_dev_table tb = _currNode;            txt_chinaName.Text = tb.table_name_chain;            txt_englishName.Text = tb.table_name_english;            grp_tableDesc.Text = "当前节点为   "+tb.table_name_english;            if (tb.table_type == 1)            {                rd_directory.Checked = true;

            }            else if (tb.table_type == 2)            {                rb_table.Checked = true;

            }            txt_remark.Text = tb.table_memo;            med_desc.Text = tb.table_descr;

            grp_tableDesc.Show();        }
时间: 2024-08-07 10:25:43

DevExpress控件的treeList完整小案例的相关文章

DevExpress控件学习总结(转)

DevExpress控件学习总结 1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹出菜单(popup menus),我们需要把一个不可见的控件(component)BarManager(Navigation&Layout)拖放到这个窗体或用户控件上.这个控件维护工具条在窗体上的布局,处理用户的行为(processes an end-user's actions),提供一些定制功能等等.

DevExpress 控件汉化代码和使用方法

DevExpress.XtraEditors.Controls  此控件包中包含的控件最多,包括文本框,下拉列表,按钮,等等       DevExpress.XtraGrid 网格       DevExpress.XtraBars 菜单栏 和 工具栏       DevExpress.XtraNavBar 导航条       DevExpress.XtraPrinting 报表打印相关       DevExpress.XtraReports 报表     DevExpress.XtraTr

DevExpress控件使用经验总结

DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或者发现的一些问题解决方案,或者也可以所示一些小的经验总结.总体来讲,使用DevExpress控件,可以获得更高效的界面设计以及更美观的效果.本文主要通过给出相应的例子以及相关界面效果来说明问题,希望大家能够从中获得好的知识和思路. 1. 应用Office2007和Office2010的界面主题 开始使用DevExpress的时候,发现程序界

DevExpress控件使用经验总结- GridView列表行号显示操作

DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或者发现的一些问题解决方案,或者也可以所示一些小的经验总结.总体来讲,使用DevExpress控件,可以获得更高效的界面设计以及更美观的效果.本文主要通过给出相应的例子以及相关界面效果来说明问题,希望大家能够从中获得好的知识和思路. 1. 应用Office2007和Office2010的界面主题 开始使用DevExpress的时候,发现程序界

Devexpress控件库----ComboBoxEdit,MRUEdit,SearchContrl控件对比

准备列表数据: public List<string> GetList() { List<string> list = new List<string>() { "Janurary","February", "March" ,"April ","May","June","July","August" , &quo

DevExpress控件的GridControl控件小结

XtraGrid 的关键类就是:GridControl和GridView.GridControl本身不显示数据,数据都是显示在GridView/CardView /XXXXView中.GridControl是各种View的容器.所以要控制显示,要从GridView这些类入手. 1.DevExpress控件组中的GridControl控件不能使横向滚动条有效.现象:控件中的好多列都挤在一起,列宽都变的很小,根本无法正常浏览控件单元格中的内容. 解决: gridView1.OptionsView.C

DevExpress控件使用经验总结【转载】

DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或者发现的一些问题解决方案,或者也可以所示一些小的经验总结.总体来讲,使用DevExpress控件,可以获得更高效的界面设计以及更美观的效果.本文主要通过给出相应的例子以及相关界面效果来说明问题,希望大家能够从中获得好的知识和思路. 1. 应用Office2007和Office2010的界面主题 开始使用DevExpress的时候,发现程序界

DevExpress 控件使用笔记 - Common Controls

这段时间一直在研究DevExpress控件库,本文是我对DevExpress工具箱中分类"DX.13.1: Common Controls"下控件的使用笔记.这个类型的控件都在DevExpress.XtraEditors.v13.1.dll中定义. 分类"DX.13.1: Common Controls"下控件列表如下: 针对以上控件,我选了一些做了笔记,内容如下: 1)ColorPickEdit,颜色选择控件,类似VS中控件属性管理器中的颜色选择工具,包括自定义.

DevExpress控件的一些快捷操作

用的DevExpress控件时,有一些操作并不太方便,根据我自己需要的封装了一些控件的事件,调用的时候直接绑定控件的事件就可以了 例如: this.ComboBoxEdit.KeyDown += CtrlBase.ComboBoxEdit_KeyDown;            this.LookUpEdit.KeyDown +=CtrlBase.LookUpEdit_KeyDown;            this.TextEdit.KeyDown += CtrlBase.TextEdit_K