做分類 經常會用到無限級別的分類 先介紹一下數據庫的表結構
tid 類別編號
tname 類別名稱
pid 父類編號
測試數據就不寫了,大家可以自己插入一下試試
查詢制定類別的 所有的子類 sql 的 代碼
代碼如下:
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("商品類別"));
效果