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)}");
}
DEV控件之TreeList使用的更多相关文章
- dev 控件的treelist
最近项目中要求用dev 控件的treelist 树形控件. 如下图 要求如下: 1:选择父节点后,子节点全部打钩: 2:选择子节点而不选择父节点,则从当前节点的父节点一直到根节点check框都是半选状 ...
- Dev控件treeList
之前做过一段时间,当时copy 的别人的代码,这就就把节点给添加了,上次帮同事做也发现了这个问题,当时没有记下来,今天有做,磨了半天,记下来吧. Dev控件treeList 要添加节点第一步是右键添加 ...
- DEV 控件使用之:TreeList
使用DEV控件也有一段时间了,一直想写点东西.最近又使用到TreeList控件,这个控件对于刚使用的人来说确实不好掌握.我想把自己知道的写下来,让还不熟悉的慢慢学会使用,对于会使用的大家交流下.如果有 ...
- Dev控件GridView单元格绑定控件
Dev控件GridView单元格绑定控件 //文本按钮 RepositoryItemButtonEdit btnFields = new RepositoryItemButtonEdit();//创建 ...
- DEV控件中GridView中的复选框与CheckBox实现联动的全选功能
最初的界面图如图1-1(全选框ID: cb_checkall DEV控件名称:gcCon ): 要实现的功能如下图(1-2 1-3 1-4)及代码所示: 图1-2 图1-3 图1-4 O(∩_∩ ...
- DEV控件Grid显示行号
DEV控件Grid的显示行号需要通过一个事件来设置,具体设置代码为: private void gridView1_CustomDrawRowIndicator(object sender, DevE ...
- DevExpress ASP.NET 使用经验谈(9)-Dev控件客户端事件 ClientSideEvents
上一节,已经介绍了ASPxGridView的自定义列和基本事件 ,本节接着将介绍Dev控件的客户端事件模型. 在上节示例基础上,我们增加一行菜单,使用Dev的ASPxMenu来实现,如下图所示. 图一 ...
- DEV控件的Gridview1
DEV控件的Gridview小技巧总结 1.设置Gridview控件的某列不可编辑 this.gridData.gridView1.Columns["change_date"].O ...
- dev控件 xtraTabbedMdiManager 如何将关闭子窗体改为收回主窗体内
前言 本文主要讲解 xtraTabbedMdiManager 如何将关闭子窗体改为收回主窗体内,顺便附上Float(浮动)的时候使窗体最大化,及指定只能某一个子窗体能浮动放大. 下面进入正题. 一.首 ...
随机推荐
- javaweb学习之路(3)Cookie
1.Cookies的原理 1)首先浏览器向服务器发出请求. 2)服务器就会根据需要生成一个Cookie对象,并且把数据保存在该对象内. 3)然后把该Cookie对象放在响应头,一并发送回浏览器. 4) ...
- 枚举:Enum-Int-String之间的转换与扩展
示例枚举: public enum Color { [Description("红色")] Red, [Description("绿色")] Green = 7 ...
- 【雕爷学编程】零基础Python(01)---“投机取巧”的三条途径
从3月13日报名尝试上网课学习(4天课8.9元),开始接触Python(中文发音“派森”),到今天有一星期了.这两天广泛搜索了一下相关的学习途径,本着“投机取巧”的出发点,居然小有心得,这里一并分享出 ...
- 【比较】遗传算法GA和遗传编程GP有什么不同?
遗传算法GA 本质上有一个固定的长度,这意味着所产生的功能有限的复杂性 通常会产生无效状态,因此需要以非破坏性方式处理这些状态 通常依赖于运算符优先级(例如,在我们的例子中,乘法发生在减法之前),这可 ...
- Hbase2.0-源码阅读环境
最近准备开始研究Hbase源码,因为第一次研究源码,所以做片笔记,踩坑踩的很耗时. 1.我用的IDE是IDEA,本地window需要配置JDK,MAVEN,HADOOP环境 2.上GitHub下载Hb ...
- Poj2965 冰箱的开关
#include<iostream> using namespace std; int flag; int step; ][]; ] = { }; ] = { }; void turn(i ...
- SpringBoot2.1电商通用(微信+支付宝)支付系统实战
『课程目录』: ├─第10章 全模块电商系统之商品模块 │ 10-1_商品列表-上.mp4 │ 10-2_商品列表-中.mp4 │ 10-3_商品列表-下.mp4 │ ...
- 【C#图解教程学习笔记】第13章 委托
13.1 什么是委托 委托是持有一个或多个方法的对象,可将一个方法传递到另一个方法. 委托是用户自定义的引用类型. 13.2 委托概述 类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列 ...
- Robot Framework(5)- 使用测试库
如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 前言 在RF 测 ...
- 解决WordPress网站被利用xmlrpc.php文件攻击问题
原因在于使用的WORDPRESS程序默认xmlrpc.php开启,而被用来DDOS攻击导致占用资源过高. 如何解决这个问题呢? 是屏蔽 XML-RPC (pingback) 的功能. add_filt ...