DevExpress控件的treeList完整小案例.docx
《DevExpress控件的treeList完整小案例.docx》由会员分享,可在线阅读,更多相关《DevExpress控件的treeList完整小案例.docx(8页珍藏版)》请在冰点文库上搜索。
DevExpress控件的treeList完整小案例
DevExpress控件的treeList完整小案例
这篇内容对刚接触treeList的程序员来说,会有一定的帮助。
以下会以一个小案例来讲解treeList的一些属性方法及事件
这是程序的窗体,frmTableMaintenance为窗体名,而groupControl1是一个分组控件,添加和修改都是用同一个分组,也就是说,不管是添加还是修改,用的都是同一个页面,而button跟随操作的变化而变化
首先,加载树,即将数据绑定到treeList中
1///
2///加载树
3///tl_TableMaintain是treeList的名称
///对于绑定数据,treeList有自带的,可以不用自己去递归。
直接指定KeyFieldName(主键),ParentFieldName(父键),以及tag值。
4///
5publicvoidLoadTree()
6{
7try
8{
9this.tl_TableMaintain.Nodes.Clear();//清空所有节点,以便重新加载
10
11ResultBase_arryTableName=Global.Get("System/GetTableMaintain");
12
13if(_arryTableName!
=null)
14{
15_snList=(List)JsonConvert.DeserializeObject(_arryTableName.Result,typeof(List));//数据源snList,这里获取数据源的方式可自由定义
16
17}
18TreeListNodenode=tl_TableMaintain.AppendNode(null,-1);
19node.SetValue(treeListColumn1,"表结构维护");
20LoadTreeCtrl(node,"-1");
21TreeListProperty(tl_TableMaintain);//调用方法,设置属性
22}
23catch(Exceptionex)
24{}
25}
26
27
28privatevoidLoadTreeCtrl(TreeListNodepnode,stringparentkey)
29{
30try
31{
32intindex=0;
33Listdv=_snList.Where(o=>o.parent_key.Trim()==parentkey.Trim()).ToList();//根据父级id获取子节点循环加载
34foreach(erp_dev_tablervindv)
35{
36TreeListNodenode=pnode.TreeList.AppendNode(rv.table_key,pnode);
37node.SetValue(0,rv.table_name_english);
38node.Tag=rv;
39LoadTreeCtrl(node,Command.Instance.Getstring(rv.table_key));
40}
41}
42catch(Exceptionex)
43{
44}
45}
46
47
48
49
50
51
52///
53///设置treeList的属性
54///
55///
56privatevoidTreeListProperty(TreeListtl)
57{
58tl.OptionsView.ShowColumns=false;//是否显示选中的行
59tl.OptionsBehavior.Editable=false;//不可编辑
60tl.OptionsView.ShowHorzLines=false;//OptionsView提供对树状列表的显示选项,设置水平线是否显示
61tl.OptionsView.ShowIndicator=false;//节点的指示面板是否显示
62tl.OptionsView.ShowVertLines=false;//垂直线条是否显示
63//设置treeList的折叠样式为+-号
64tl.LookAndFeel.UseDefaultLookAndFeel=false;
65tl.LookAndFeel.UseWindowsXPTheme=true;
66tl.OptionsSelection.InvertSelection=true;//聚焦的样式是否只适用于聚焦细胞或所有细胞除了聚焦对象,失去焦点后
67}
68
69
然后,单击或双击树节点时,加载该节点对象的详细信息,如图:
如果树里面的节点较多,可以采取查询的方法定位到该节点上。
如图中的查询框一样,当点击查询时,查看数据库中是否存在该对象,若存在,则将焦点定位到该节点上,反之,则提示输入的对象不存在!
如图:
代码如下:
1///
2///点击查询,查出相应的
3///
4///
5///
6privatevoidbtn_selectTName_Click(objectsender,EventArgse)
7{
8tName=txt_name.Text.Trim();
9if(!
String.IsNullOrEmpty(tName))
10{
11
12GetTMByName();
13btn_saveOrUpdate.Text="修改";
14}
15else
16{
17Global.ShowMeg(Command.MsgType.Warning,"请填写您要查询的表名");
18this.txt_name.Focus();
19}
20}
21
22///
23///迭代找到节点
24///
25///
26///
27///
28privateTreeListNodeforNode(TreeListNodenode,stringtext)
29{
30erp_dev_tabletableOne=(erp_dev_table)node.Tag;
31if(tableOne!
=null)
32{
33if(tableOne.table_name_english==text)
34{
35returnnode;
36}
37
38}
39//循环父节点下的所有子节点
40foreach(TreeListNodeninnode.Nodes)
41{
42
43TreeListNodern=forNode(n,text);
44if(rn!
=null)
45returnrn;
46
47}
48returnnull;
49}
50
51
52publicvoidGetTMByName()
53{
54TreeListNodenode=forNode(this.tl_TableMaintain.Nodes[0],tName);
55if(node==null)
56{
57Global.ShowMeg(Command.MsgType.Warning,"您输入有误,当前实体不存在");
58return;
59}
60
61if(node.ParentNode.Expanded==false)
62{
63node.ExpandAll();
64
65}
66this.tl_TableMaintain.FocusedNode=node;
67BangDing();
68
69
70}
71
publicvoidBangDing()
{
_currNode=(erp_dev_table)tl_TableMaintain.FocusedNode.Tag;
erp_dev_tabletb=_currNode;
txt_chinaName.Text=tb.table_name_chain;
txt_englishName.Text=tb.table_name_english;
grp_tableDesc.Text="当前节点为"+tb.table_name_english;
if(tb.table_type==1)
{
rd_directory.Checked=true;}
elseif(tb.table_type==2)
{
rb_table.Checked=true;}
txt_remark.Text=tb.table_memo;
med_desc.Text=tb.table_descr;grp_tableDesc.Show();
}