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("商品类别"));
效果