一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

C# 無(wú)限級(jí)分類(lèi)的實(shí)現(xiàn)

數(shù)據(jù)庫(kù)表:CategoryInfo
字段名 類(lèi)型
ciID int //記錄序號(hào),自增量
ciName nvarchar(20) //分類(lèi)名
ciParent int //父分類(lèi)序號(hào)
ciLayer int //所處的層次
ciDescription nvarchar(200) //對(duì)分類(lèi)的描述
分類(lèi)的類(lèi)設(shè)計(jì)
public class CategoryInfo
{
private int ciID;//分類(lèi)ID
private string ciName;//分類(lèi)名
private int ciParent;//分類(lèi)的父分類(lèi)ID
private string ciDescription;//分類(lèi)描述
private int ciLayer;//分類(lèi)所屬層次
//構(gòu)造函數(shù)
public CategoryInfo() { }
public CategoryInfo(int cID, string cName, int cParent, string cDescription, int cLayer)
{
this.ciID = cID;
this.ciName = cName;
this.ciParent = cParent;
this.ciDescription = cDescription;
this.ciLayer = cLayer;
}
//屬性
public int CategoryID
{
get{ return ciID;}
set { ciID = value;}
}
public string CategoryName
{
get{ return ciName;}
set { ciName = value; }
}
public int CategoryParent
{
get{ return ciParent;}
set { ciParent = value; }
}
public string CategoryDescription
{
get { return ciDescription; }
set { ciDescription = value; }
}
public int CategoryLayer
{
get { return ciLayer; }
set { ciLayer = value; }
}
}
獲取子分類(lèi)的存儲(chǔ)過(guò)程
CREATE PROCEDURE [dbo].[category_getChild]
@cName nvarchar(20)
AS
BEGIN
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
獲取子分類(lèi)的函數(shù)
public IList<CategoryInfo> GetChildCategories(IList<CategoryInfo> cInfos,string cName)
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("category_getChild", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter(PARAM_CNAME, SqlDbType.NVarChar, 20));
cmd.Parameters[PARAM_CNAME].Value = cName;
IList<string> tmpNames = new List<string>(); //臨時(shí)存儲(chǔ)獲取的子
try
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
CategoryInfo cInfo = new CategoryInfo(
(int)reader["ciID"],
reader["ciName"].ToString(),
(int)reader["ciParent"],
reader["ciDescription"].ToString(),
(int)reader["ciLayer"]
);
string tmpName = reader["ciName"].ToString();
cInfos.Add(cInfo);//添加獲取到的分類(lèi)到cInfos
tmpNames.Add(tmpName);//添加獲取到的子分類(lèi)名到tmpNames
}
}
}
catch
{
throw new ApplicationException("獲取分類(lèi)出錯(cuò)!");
}
finally
{
con.Close();
}
foreach(string c in tmpNames)
{
cInfos = GetChildCategories(cInfos,c); //遞歸運(yùn)算。繼續(xù)獲取子分類(lèi)
}
return cInfos;
}
說(shuō)明:在該函數(shù)中,tmpNames如果換成是IList<CategoryInfo>,即它添加的元素與cInfos是一樣的時(shí),如果要移除其中的一項(xiàng),則cInfos中會(huì)同時(shí)移除一項(xiàng)。因?yàn)镃ategoryInfo是類(lèi),是引用類(lèi)型的,而非值類(lèi)型。所以tmpNames采用了string類(lèi)型,以避免這個(gè)問(wèn)題。
對(duì)上面這個(gè)函數(shù)直接調(diào)用還稍嫌麻煩,上層程序還需要建立一個(gè)IList<CategoryInfo>對(duì)象,因此可以增加一個(gè)函數(shù)來(lái)調(diào)用上面的函數(shù)。這樣,上層程序只需要提供分類(lèi)名,以及是否包含本級(jí)分類(lèi)兩個(gè)參數(shù)就可以了。
//獲取子分類(lèi),其中布爾參數(shù)表示是否包含本級(jí)分類(lèi)
public IList<CategoryInfo> GetCategories( string cName, bool IsIncludeSelf)
{
IList<CategoryInfo> cInfos = new List<CategoryInfo>();
cInfos = GetChildCategories(cInfos, cName);
if (IsIncludeSelf == true)
{
cInfos.Insert(0, GetByName(cName));//根據(jù)名字獲取分類(lèi),這個(gè)很簡(jiǎn)單,本文略。
}
return cInfos;
}
注意:采用這種方式時(shí),WEB服務(wù)器獲取子分類(lèi)時(shí)要在數(shù)據(jù)庫(kù)服務(wù)器之間有多次往返,降低了性能。采用存儲(chǔ)過(guò)程實(shí)現(xiàn)遞歸邏輯,直接返回子分類(lèi)列表的方式應(yīng)該有更好的性能,尤其是Web服務(wù)器與數(shù)據(jù)庫(kù)服務(wù)器不位于同一臺(tái)服務(wù)器上時(shí),更會(huì)受網(wǎng)絡(luò)影響。

AspNet技術(shù)C# 無(wú)限級(jí)分類(lèi)的實(shí)現(xiàn),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 五月婷婷丁香在线观看 | 意大利高清xxxxx | 精品123区 | 色婷婷激情五月综合 | 999国内精品永久免费视频 | 婷婷色站 | 亚洲天堂一区二区三区四区 | 亚洲欧美94色 | 日韩在线二区 | 国产精品视频一区二区三区w | 欧美亚洲三级 | 成 人 黄 色 视频播放165 | 第一页在线视频 | va免费视频| 亚洲激情a | 亚洲国产天堂久久综合图区 | 五月天激情婷婷 | 亚洲精品国产综合久久一线 | 日韩一区在线播放 | 国产九色 | 99精品久久秒播无毒不卡 | 91视频免费看 | 第一区免费在线观看 | 中文字幕一区2区3区 | 成人福利视频网站 | 日本一区二区高清免费不卡 | 久久久久久久综合 | 国产真实乱子伦视频播放 | 三级小说第一页 | 黄 在线| 成人国产第一区在线观看 | 精品阁| 天天更新天天久久久更新影院 | 日日插夜夜操 | 国产成人激烈叫床声视频对白 | 一区二区免费视频观看 | 91精彩视频 | 黄色片网址在线观看 | 国产亚洲91 | 欧美一区二区三区激情啪啪 | 91大奶|