1. 程式人生 > >【轉】Asp.net 用datalist嵌套的方法實現二級菜單的分類導航

【轉】Asp.net 用datalist嵌套的方法實現二級菜單的分類導航

col ESS 方法 tab server select lec cut esp

剛開始學習Asp.net做網站的時候, 做的是一個電子圖書購買網站,發現圖書有多級類目。 例如:小說分類下面世界名著,中國古典小說....... 文學類目下有 文學理論 中國古典詩歌。 這些要是直接寫死在網站裏面的話,不利於後面去添加和修改分類,這樣做的話是非常不利於後期網站維護的。那麽有什麽辦法把兩級分類數據都通過去後臺輸入,前臺去讀取呢?也就是這些分類存在數據庫中,實現動態讀取。

找了些資料,然後我整合下,終於可以應用到自己的網站了。 用的是Listview或者datalist嵌套。我這裏就用我的圖書網站為例。 用datalist實現二級嵌套。

實現原理

是在pageload 事件下加載一級分類, 然後在一級分類datalist1onitemdatabound事件下去讀取一級分類的id , 然後根據一級分類的id 去檢索二級分類的id (外鍵),當二級分類的id(等於)一級分類的id時候,把數據庫中的數據綁定到二級分類的datalist2上。

先看看效果圖

技術分享圖片

一.數據庫設計

1. 數控庫設計

TypeOne 一級分類數據庫表

ID int 主鍵

BookTypeOne char 一級分類名

TyperTwo (二級分類數據庫表)

ID int 主鍵

BookType char 二級分類名

IDno int 一級分類名(外鍵)

Bookinfo圖書信息表

Bookid int 主鍵

BookType char 外鍵

前臺ASPX代碼

首先在前臺aspx頁面嵌套兩個datalist

代碼:

<asp:DataList ID="DataList1" runat="server"

onitemdatabound="DataList1_ItemDataBound">

<ItemTemplate>

<asp:Label ID="Label1" runat="server" Visible="false"

Text=‘<%# Eval("ID") %>‘ />

<asp:Label ID="BookTypeOneLabel" runat="server"

Text=‘<%# Eval("BookTypeOne") %>‘ />

<asp:DataList ID="DataList2" runat="server" >

<ItemTemplate>

<asp:Label ID="BookTypeOneLabe2" runat="server"

Text=‘<%# Eval("BookType") %>‘ />

</ItemTemplate>

</asp:DataList>

</ItemTemplate>

</asp:DataList>

三.後臺代碼:在頁面加載的時候他要先加載一級分類

protected void Page_Load(object sender, EventArgs e)

{

try

{

SqlDataReader read;

string sql = " SELECT *from TypeOne";

DB db = new DB();

SqlConnection cnn = db.ConnectionCnnString1;

read = db.SelectTable(sql);

DataList1.DataSource = read;

DataList1.DataBind();

}

catch (Exception ex)

{

Response.Write("查詢失敗" + ex.Message);

}

finally

{

}

//這是datalist1DataList1_ItemDataBound 事件的代碼

//千萬不要寫在pageload裏面直接綁定哦。

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)

{

SqlDataReader read;

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)

{

DataList myDataList1 = (DataList)e.Item.FindControl("DataList2");

//提取一級分類ID

string id= ((Label)e.Item.FindControl("Label1")).Text;

//一級分類的id與二級分類idno(外鍵)匹配

string sql = "SELECT BookType from TyperTwo where TyperTwo.IDno=" + id;

//把sql語句傳到DB類查詢

DB db = new DB();

SqlConnection cnn = db.ConnectionCnnString1;

read = db.SelectTable(sql);

myDataList1.DataSource = read;

myDataList1.DataBind();

}

}

四.數據庫DB.cs類代碼

//聲明連接屬性

public SqlConnection ConnectionCnnString1

{

get

{

string constr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

cnn = new SqlConnection(constr);

cnn.Open();

return cnn;

}

}

//查詢方法,這個方法只需要接收傳過來sql語句

public SqlDataReader SelectTable(string sql)

{

if (cnn.State == ConnectionState.Closed)

{

cnn.Open();

}

cmd = new SqlCommand(sql, cnn);

read = cmd.ExecuteReader();

return read;

}

在這裏起到拋磚引玉的作用,希望大神能夠不恥下問,完善。

【轉】Asp.net 用datalist嵌套的方法實現二級菜單的分類導航