手机版

详细说明TreeList控件在DevExpress程序中的使用以及节点查询的处理

时间:2021-09-06 来源:互联网 编辑:宝哥软件园 浏览:

在很多情况下,我们需要通过树形列表来显示数据,比如一些层次数据。通过分层显示,用户可以更直观地查看和管理相关数据。在一般Winform开发中,可以使用Microsoft TreeView控件或DevExpress TreeList控件来显示数据。本文主要介绍了基于DevExpress的TreeList控件的使用以及使用SearchControl查询节点的操作。

1、使用微软的TreeView控件实现结果和想法

在许多情况下,我们也倾向于使用TreeView控件作为数据显示。与TreeList控件相比,这类控件需要自行管理树节点的层次关系,但使用起来也相对简单,两者呈现效果差别不大。

比如在我的开发框架中,在字典管理模块中,这个控件是用来显示数据的,整体效果还不错。

在树列表中,我们得到数据后,可以根据层次关系构建树节点,如下面的代码所示。

///summary////初始化树信息////summary private void init treeview(){ this . treeview 1 . nodes . clear();this . treeview 1 . begin update();ListDictTypeNodeInfo类型节点列表=BLLFactoryDictType。instance . Getree();foreach(type nodelist中的dictypedenodeinfo){ AddTree(null,info);} this . treeview 1 . EndPdate();this . treeview 1 . expandall();}///summary///根据节点数据递归构建此级别以下的树节点。/////Summary//Param name=' pnode '父树节点/param///param name='info '字典类型数据/Param private void add tree(treenode pnode,dictypedenodeinfo info){ treenodenode=null if(info。PID=='-1') { node=new TreeNode(信息。名称,0,0);节点。标签=信息。身份证;this . treeview 1 . nodes . add(node);} else { node=new TreeNode(信息。姓名,1,1);节点。标签=信息。身份证;pNode。节点。添加(节点);} foreach(info中的DictTypeNodeInfo subInfo。子项){ AddTree(节点,subInfo);}}当我们用鼠标选择一个节点时,我们会触发AfterSelect事件,这样我们就可以处理鼠标节点的事件

///summary///click节点事件处理////summary private void treeview 1 _ after select(对象发送方,treeview event args e){ if(e . node . tag!=null){ this . lbldicttype . text=e . node . text;this . lbldicttype . tag=e . node . tag;BindData();}}以上是使用TreeView控件处理数据的显示。从上面的代码可以看出,整个内容主要是通过递归关系构建TreeNode的处理,但是使用的代码并不复杂,所以大部分都可以通过这种方式自定义树节点的显示。

2.使用DevExpress的TreeList控件的效果和实现代码

在使用DevExpress的TeeList控件时,可以通过KeyFieldName和ParentFieldName来指定它们的层次关系,使用起来比较方便,提供的数据源会自动处理层次关系,非常方便。

让我们来看看通过DevExpress的TreeList控件显示的字典类型和字典数据的界面效果。

通过代码如何达到效果?

首先,我们使用代码获取字典类型数据并初始化树列表控件,如下所示。

//添加这个。tree.columns.add(新的treelist列{字段名=' name ',标题=' dictionary type name ',Width=160,VisibleIndex=0 });//设置层次关系和属性树。树控件的键字段名称='标识';树。ParentFieldName=' PIDthis . tree . options behavior . editable=false;this . tree . options view . enableappareranceodrow=true;this . tree . options view . enableappareranceeverow=true;在上面的代码中,我们还可以通过扩展函数来封装树形列表的处理,达到了简化代码的目的。以下是处理后的实现代码:

//控件扩展函数封装处理this.tree.CreateColumn('Name ','字典类型名称,160,真);this.tree.InitTree('ID ',' PID ','-1 ',false,false);通过添加TreeListColumn对象给树形列表控件就可以实现字段列的显示了,同时指定数据源里面的KeyFieldName和ParentFieldName来设定层级关系即可,非常简单。

而绑定数据源,则可以通过一个函数进行处理,如下所示。

///摘要///绑定树的数据源////summary private void BindTree(){ this。树。数据源=bllfactryDictype .实例。GetAll();这个。树。expandall();}从上面代码我们可以看到,我们返回的数据源,不需要在实体类对象层级具有上下级的关系,如通过TreeView实现的时候,我们使用了dictypedenodefinfo对象是具有上下层级关系的。

这里只需要使用普通的DictTypeInfo对象集合即可,通过KeyFieldName和ParentFieldName来设定层级关系即可。

为了指定树形节点的图标,我们可以通过代码进行自定义图标的处理,如下代码所示,这样每个层级的图标都不一样,自动实现获取设置的处理。

//设置树的图标集合及逐级图标这个。树。selectimagelist=this。image collection 1;这个。树。customdrawnode images=(对象发送者,customdraw node imageseventargs e)={ int MaxCount=this。imagecollection 1。图像。计数;定义变量索引=e.Node.Level maxCount?节点级别: 0;e . selectimage index=index };实现树节点选中的事件处理,则需要实现FocusedNodeChanged事件即可。

//初始化树节点选择事件这个。树。聚焦节点已更改=委托(对象发送者,聚焦nodeChangedeventargs e){这.聚焦节点已更改();};} private void聚焦节点已更改(){ if(this。树。聚焦节点!=null) { var PID=字符串concat(这个。树。聚焦节点。getvalue(' ID ');treeConditionSql=字符串。格式(' DictType_ID='{0} ',PID);} else { TreeConditionSqL=} BiNDDATa();}最后初始化树列表的代码如下所示。

private void InitTree(){ this。树。列。clear();//控件扩展函数封装处理this.tree.CreateColumn('Name ','字典类型名称,160,真);this.tree.InitTree('ID ',' PID ','-1 ',false,false);//设置树的图标集合及逐级图标这个。树。selectimagelist=this。image collection 1;这个。树。customdrawnode images=(对象发送者,customdraw node imageseventargs e)={ int MaxCount=this。imagecollection 1。图像。计数;定义变量索引=e.Node.Level maxCount?节点级别: 0;e . selectimage index=index };}3、基于SearchControl控件对节点进行查询的操作

上面的处理就是树列表的一般性展示,如果需要在树节点上面增加一个查询过滤的操作,那么可以使用SearchControl控件进行过滤处理,只需要设置SearchControl控件的客户属性,以及实现树控件的FilterNode事件即可。

///摘要///实现树节点的过滤查询////summary private void InitSearchControl(){ this。searchcontrol 1。客户端=这个。树;this.tree.FilterNode=(对象发送方,DevExpress .xtractreelist。filternodeventargs e)={ if(tree .DataSource==null)返回;字符串节点文本=e节点。getdisplaytext(' Name ');//参数填写FieldName if(字符串isnullorhitespace(nodeText))返回;bool isExist=nodeText .索引Of(搜索控件1 .文本,字符串比较organialignorcase)=0;if(iSexist){ var node=e . node。父节点;而(节点!=null) { if(!节点。可见){ node .可见=真;节点=节点ParentNode } else break } } e . Node。Visible=isExist处理=真;};}实现效果如下所示,对于符合记录的查询,那么会有高亮的颜色进行重点标注。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

版权声明:详细说明TreeList控件在DevExpress程序中的使用以及节点查询的处理是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。