DEV控件之TreeList使用

綁定DataTablejson

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

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

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

 

效果以下: 設計

  綁定List3d

也能夠直接綁定List集合,其使用方式不變,但在取得節點數據時稍有不一樣。code

            //序列化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兩個字段,經過代碼無效。blog

能夠經過設計界面的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)}");
            }
相關文章
相關標籤/搜索