zoukankan      html  css  js  c++  java
  • 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)}");
                }
  • 相关阅读:
    fish shell version
    golang io.ReadFull
    Unity5 2D Animation
    unity3d vscode
    golang bufio.Scanner
    kafka知识点
    linux clone
    Oracle查询在哪些 存储过程/函数/触发器 等等中包含 指定字符串
    在Oracle中,使用简洁的函数(Function)实现字符串split分割效果
    在Spring中,使用ProxyFactory实现对Cglib代理对象的再次代理
  • 原文地址:https://www.cnblogs.com/superfeeling/p/13046697.html
Copyright © 2011-2022 走看看