C#TreeView 实现无线级别分类

来源:互联网 发布:褥子什么材质的好 知乎 编辑:程序博客网 时间:2024/05/18 17:55

 

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

tid  类别编号

tname 类别名称

pid 父类编号

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

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

with as 递归查询
alter proc  proc_chaxun(@tid int )asbegin          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 ttend 

查询之后获取记录集   绑定到前台的 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("商品类别"));

效果


<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>