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();
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM