zoukankan      html  css  js  c++  java
  • C#TreeView 实现无线级别分类

    做分类 经常会用到无限级别的分类  先介绍一下数据库的表结构

    tid  类别编号

    tname 类别名称

    pid 父类编号

    测试数据就不写了,大家可以自己插入一下试试

    查询制定类别的 所有的子类   sql 的 代码

    with as 递归查询
    alter proc  proc_chaxun
    (@tid int )
    as
    begin  
    
        
        with tt  as 
        (
            
            select tid,tname,pid from dbo.t_goodsType where tid=@tid
            union all
            select t.tid,t.tname,t.pid from dbo.t_goodsType  t inner join tt
            on t.pid=tt.tid
        )
        select * from tt
    end 

    查询之后获取记录集   绑定到前台的 TreeView 上面

    递归进行添加
     /// <summary>
                /// 给Tree 绑定数据 递归添加子节点
                /// </summary>
                /// <param name="dv">数据视图</param>
                /// <param name="tnOld">添加数据的节点</param>
                public void TreeDataBind(DataView dv,TreeNode tnOld)
                {
                    TreeNode tnNew;    //创建一个新的节点
                    foreach (DataRowView drv in dv)
                    {
                        //为新的借点设置属性 
                        tnNew = tnOld.Nodes.Add(drv["tname"].ToString());
                        tnNew.Tag = drv["tid"];
                        //过滤数据视图 父类id = 上一级的tid
                        dv.RowFilter = "pid=" + drv["tid"].ToString();
                        //自己调用自己 
                        TreeDataBind(dv, tnNew);
                    }
                }
              

    调用的方法很简单

    调用
    DataTable dtRet = (DataTable)dh.ExecProcRetObj(ep);
    DataView dv = new DataView(dtRet);
     dv.RowFilter = "pid=0";
    TreeDataBind(dv, this.treeView1.Nodes.Add("商品类别"));

    效果

  • 相关阅读:
    MYSQL连接不上100061错误
    最小生成树
    装载问题
    贪心算法-- 纪念品分组
    折腾日记----「乱七八糟的过程」
    LeetCode ---- 474. 一和零「二维01背包」
    Erlang TCP 实例
    Erlang 入门 ---- 基础(一)
    SpringBoot ---- Spring Security
    LeetCode----1026. 节点与其祖先之间的最大差值
  • 原文地址:https://www.cnblogs.com/hzy168/p/2992612.html
Copyright © 2011-2022 走看看