55°

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);
        </span><span style="color: #008000;">//</span><span style="color: #008000;">简单绑定</span>
        treeList1.DataSource =<span style="color: #000000;"> list;
        </span><span style="color: #008000;">//</span><span style="color: #008000;">主键字段名称</span>
        treeList1.KeyFieldName = <span style="color: #800000;">"</span><span style="color: #800000;">ClassID</span><span style="color: #800000;">"</span><span style="color: #000000;">;
        </span><span style="color: #008000;">//</span><span style="color: #008000;">父级字段名称</span>
        treeList1.ParentFieldName = <span style="color: #800000;">"</span><span style="color: #800000;">ParentID</span><span style="color: #800000;">"</span><span style="color: #000000;">;
        </span><span style="color: #008000;">//</span><span style="color: #008000;">展开所有节点</span>
        treeList1.ExpandAll();</pre> 

 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());
        </span><span style="color: #008000;">//</span><span style="color: #008000;">通过GetFocusedRow方法获取当前行</span>
        <span style="color: #0000ff;">object</span> Obj =<span style="color: #000000;"> treeList1.GetFocusedRow();

        </span><span style="color: #008000;">//</span><span style="color: #008000;">如果数据源是DataTable,则可以将Obj转换为DataRowView对象</span>
        DataRowView drv = Obj <span style="color: #0000ff;">as</span><span style="color: #000000;"> DataRowView;
        </span><span style="color: #008000;">//</span><span style="color: #008000;">输出列数据</span>
        XtraMessageBox.Show(drv[<span style="color: #800000;">"</span><span style="color: #800000;">ClassName</span><span style="color: #800000;">"</span><span style="color: #000000;">].ToString());

        </span><span style="color: #008000;">//</span><span style="color: #008000;">如果数据是List泛型,则可以将Obj转换为对应的实体</span>
        dc_sysitemsclass model = Obj <span style="color: #0000ff;">as</span><span style="color: #000000;"> dc_sysitemsclass;
        </span><span style="color: #008000;">//</span><span style="color: #008000;">输出列数据</span>

XtraMessageBox.Show(model.ClassName); }

 

 

 

遍历

 可以通过foreach对TreeList节点进行遍历,其中的每一项是一个TreeNode。

            //遍历节点
            foreach (TreeListNode item in treeList1.Nodes)
            {
                XtraMessageBox.Show($"节点ID:{item.Id},节点名称:{item.GetDisplayText(0)}");
            }

 

本文转载自博客园,原文链接:https://www.cnblogs.com/superfeeling/p/13046697.html

全部评论: 0

    我有话说: