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)}");
            }
相关文章
相关标签/搜索