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)}");
                }
  • 相关阅读:
    Python中的类(上)
    Django REST Framework API Guide 07
    Django REST Framework API Guide 06
    Django REST Framework API Guide 05
    Django REST Framework API Guide 04
    Django REST Framework API Guide 03
    Django REST Framework API Guide 02
    Django REST Framework API Guide 01
    Django 详解 信号Signal
    Django 详解 中间件Middleware
  • 原文地址:https://www.cnblogs.com/superfeeling/p/13046697.html
Copyright © 2011-2022 走看看