所做的小專案中需要多級分類, 試著學習實現多級分類。由於對儲存過程本身並不大熟悉,也不想借助於treeview,於是遞迴邏輯採用c#實現,配合數資料庫完成了多級分類的獲取方法。增加分類節點應該說是比較簡單的,此文暫略。
資料庫表:categoryinfo
欄位名 型別
ciid int //記錄序號,自增量
ciname nvarchar(20) //分類名
ciparent int //父分類序號
cilayer int //所處的層次
cidescription nvarchar(200) //對分類的描述
分類的類設計
public class categoryinfo
public categoryinfo(int cid, string cname, int cparent, string cdescription, int clayer)
//屬性
public int categoryid
set
}public string categoryname
set
}public int categoryparent
set
}public string categorydescription
set
}public int categorylayer
set }}
獲取子分類的儲存過程
create procedure [dbo].[category_getchild]
@cname nvarchar(20)
asbegin
declare @tmpid int
select @tmpid=ciid from categoryinfo
where rtrim(ciname) = rtrim(@cname)
if(@tmpid is not null)
select * from categoryinfo
where ciparent = @tmpid
order by cilayer
end獲取子分類的函式
public ilistgetchildcategories(ilistcinfos,string cname)
說明:在該函式中,tmpnames如果換成是ilist,即它新增的元素與cinfos是一樣的時,如果要移除其中的一項,則cinfos中會同時移除一項。因為categoryinfo是類,是引用型別的,而非值型別。所以tmpnames採用了string型別,以避免這個問題。
對上面這個函式直接呼叫還稍嫌麻煩,上層程式還需要建立乙個ilist物件,因此可以增加乙個函式來呼叫上面的函式。這樣,上層程式只需要提供分類名,以及是否包含本級分類兩個引數就可以了。
//獲取子分類,其中布林引數表示是否包含本級分類
public ilistgetcategories( string cname, bool isincludeself)
return cinfos;
}注意:採用這種方式時,web伺服器獲取子分類時要在資料庫伺服器之間有多次往返,降低了效能。採用儲存過程實現遞迴邏輯,直接返回子分類列表的方式應該有更好的效能,尤其是web伺服器與資料庫伺服器不位於同一臺伺服器上時,更會受網路影響。
用迭代實現無限級分類
說起那個無限級分類,相信很多人都知道是什麼東西,也曾經做過。我也相信,大家用得最多的實現方式就是做乙個遞迴。最近我也要做乙個帶無限級分類的選單,但是我又不想用遞迴來做,所以我需要用其他方式來實現,那就是迭代了。首先,我需要定義乙個實體模型,這舉乙個省市無限級的例子 class loaction pu...
C 實現無限級分類樹
開發工具以及開發語言 visual studio.net 2005 c 資料庫 sql server 2000 資料庫名 ielkq 密碼為空 向裡面新增如下資料 注,其中的部門名稱是我亂來的 解釋 dept id是部門號,name dep是部門名稱,id dept是所屬的部門號,其意義是,如 de...
用遞迴的方法實現無限極分類
通常我在寫專案的時候,在寫一些例如 分類的時候會實現對應分類的上級分類,或者其它專案部門管理的上級部門的時候一般就會用到無限極分類來進行分類 第一步 首先在資料表設計的時候,如果要實現無限極分類,一般我會在資料表多新增乙個欄位pid,下面我通過一張新建的資料表來說明一下,1 建表 table str...