dev控件treelist获取点击节点的所有子节点

本文介绍如何在dev控件treelist中,通过递归方法获取点击父节点的所有子节点,包括处理嵌套子节点的情况。实现步骤包括获取数据源、获取点击行信息,遍历获取id,并通过Getids方法实现。可以应用于控件的单击、双击等事件中,根据需求筛选特定条件的子节点id。

使用场景

一般我们想要获取父id下(分部)的所有子id(子项),直接遍历就行了!但是满足分部下可能在嵌套一个分部呢?或者嵌套多个分部呢?这时我们就需要用递归方法去获取了!

实现思路

1.首先获取数据源!我们可以使用强转方法来实现!

DataTable Qdtable = (treelist.DataSource) as DataTable;

2.得到点击行的信息

var Selectionnode = treelist.Selection.ToList();

3.遍历获取点击行的信息,拿到id,因为是treelist所以要满足父子节点,这里id是父节点,pid是子节点!

foreach (TreeListNode node in Selectionnode)
{
    long fuid = node["id"].ToLong();
    List<long> ids = new List<long>();
    Getids(Qdtable, fuid,ids);//得到所有子分部id
    //ids即为子id的集合!
}

4.Getids方法的实现!

        
        /// <summary>
        /// 根据父id获取分部子id集合
        /// </summary>
        /// <param name="table"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        private void Getids(DataTable table, long id,List<long> ids)
        {
            ids.Add(id);
            var list = table.Select("pid =" + id);
            if (list.Count() > 0)
            {
                foreach (DataRow row in list)
                {
                    Getids(table, row[Constant.fnID].ToLong(),ids);
                }
            }
        }

很多可能只想拿到满足特定条件的id,只需要修改GetQdFbids方法的这一句:

var list = table.Select("pid =" + id);

例如:我现在只想拿数据类型datatype为1的所有id,既:

var list = table.Select("datatype = 1 and pid =" + id);

至于在那个事件中写可以在控件treelist的单击,双击,编辑完等事件都可以写!
实现方法有多种!能帮助你解决问题作者的目的也就达到了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值