DEV控制元件之TreeList使用
阿新 • • 發佈:2020-06-05
繫結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)}"); }
&n