分享

DevExpress控件的treeList完整小案例

 qxy2215 2016-11-27

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

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

 

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

 

 

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

 1  /// 
 2         /// 加载树
 3         ///tl_TableMaintain是treeList的名称
      ///对于绑定数据,treeList有自带的,可以不用自己去递归。直接指定KeyFieldName(主键),ParentFieldName(父键),以及tag值。
4 ///
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)JsonConvert.DeserializeObject(_arryTableName.Result, typeof(List));//数据源 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 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 /// 53 /// 设置treeList的属性 54 /// 55 /// 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  /// 
 2         /// 点击查询,查出相应的
 3         /// 
 4         /// 
 5         /// 
 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         /// 
23         /// 迭代找到节点
24         /// 
25         /// 
26         /// 
27         /// 
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();
        }

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多