DEV控件之TreeList使用


綁定DataTable

直接設置DataSource即可,同時需要設置KeyFieldName和ParentFieldName兩個屬性,好處就是,無需像TreeView一樣去遞歸節點,設置了這兩個屬性自動實現節點綁定。

注意:綁定的字段名稱區分大小寫

            //簡單綁定
            treeList1.DataSource = Exam_Week.DbHelper.ExecuteDataTable("select * from dc_sysitemsclass");
            //主鍵字段名稱
            treeList1.KeyFieldName = "ClassID";
            //父級字段名稱
            treeList1.ParentFieldName = "ParentID";
            //展開所有節點
            treeList1.ExpandAll();

 

效果如下: 

  綁定List

也可以直接綁定List集合,其使用方式不變,但在取得節點數據時稍有不同。

            //序列化json
            string json = JsonConvert.SerializeObject(Exam_Week.DbHelper.ExecuteDataTable("select * from dc_sysitemsclass"));
            //反序列化json
            List<dc_sysitemsclass> list = JsonConvert.DeserializeObject<List<dc_sysitemsclass>>(json);

            //簡單綁定
            treeList1.DataSource = list;
            //主鍵字段名稱
            treeList1.KeyFieldName = "ClassID";
            //父級字段名稱
            treeList1.ParentFieldName = "ParentID";
            //展開所有節點
            treeList1.ExpandAll();

 TreeList多列顯示

經測試,如果需要多列顯示,必須通過設計器配置KeyFieleName和ParentFieldName兩個字段,通過代碼無效。

可以通過設計界面的Add Column菜單,為TreeList添加多列,並綁定相關的字段,設置列后,TreeList將自動按照添加的列進行顯示;

 配置列標題和綁定的字段名:

配置后的效果如下:

 

 

常用事件

 

FocusedNodeChanged事件:選擇的節點發生改變時觸發,可以獲取上一個選擇的節點和當前選擇的節點
獲取節點的方法:
上一個節點:e.OldNode
當前節點:e.Node
獲取節點顯示的文本:
GetDisplayText(..)方法,參數:可以傳入TreeList列ID索引(從0開始)或者傳入綁定的字段名
        /// <summary>
        /// 選擇節點發生改變時觸發
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void treeList1_FocusedNodeChanged(object sender, DevExpress.XtraTreeList.FocusedNodeChangedEventArgs e)
        {
            //上一個選擇的節點
            if(e.OldNode != null)
            {
                //GetDisplayText:獲取節點顯示的文本
                XtraMessageBox.Show($"節點ID:{e.OldNode.Id},節點名稱:{e.OldNode.GetDisplayText(0)}");
            }
            //當前選擇的節點
            if(e.Node != null)
            {
                XtraMessageBox.Show($"節點ID:{e.Node.Id},節點名稱:{e.Node.GetDisplayText(0)}");
            }
        }

AfterFocusNode事件:節點選擇后觸發,可以獲取當前選擇的節點

獲取節點的方法:e.Node

        /// <summary>
        /// 節點選擇后觸發
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void treeList1_AfterFocusNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
        {
            ///當前選擇的節點
            if (e.Node != null)
            {
                XtraMessageBox.Show($"節點ID:{e.Node.Id},節點名稱:{e.Node.GetDisplayText(0)}");
            }
        }

通過按鈕獲取當前選中行

可以通過GetFocusedDataRow方法或者GetFocusedRow方法獲取當前行,其中,GetFocusedDataRow只適用於數據源是DataTable的類型;

 

        /// <summary>
        /// 通過按鈕獲取當前行
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            //獲取數據源是DataTable的DataRow,如果數據源不是DataTable,則此項為空
            DataRow dr = treeList1.GetFocusedDataRow();
            //輸出列數據
            XtraMessageBox.Show(dr["ClassName"].ToString());

            //通過GetFocusedRow方法獲取當前行
            object Obj = treeList1.GetFocusedRow();

            //如果數據源是DataTable,則可以將Obj轉換為DataRowView對象
            DataRowView drv = Obj as DataRowView;
            //輸出列數據
            XtraMessageBox.Show(drv["ClassName"].ToString());

            //如果數據是List泛型,則可以將Obj轉換為對應的實體
            dc_sysitemsclass model = Obj as dc_sysitemsclass;
            //輸出列數據
            XtraMessageBox.Show(model.ClassName);
        }

 

 

 

遍歷

 可以通過foreach對TreeList節點進行遍歷,其中的每一項是一個TreeNode。這種遍歷方式只能遍歷一級節點,如果要遍歷所有節點,需要用到遞歸。

            //遍歷節點
            foreach (TreeListNode item in treeList1.Nodes)
            {
                XtraMessageBox.Show($"節點ID:{item.Id},節點名稱:{item.GetDisplayText(0)}");
            }

 


免責聲明!

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



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