綁定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)}"); }