【轉】Asp.net 用datalist嵌套的方法實現二級菜單的分類導航
剛開始學習Asp.net做網站的時候, 做的是一個電子圖書購買網站,發現圖書有多級類目。 例如:小說分類下面世界名著,中國古典小說....... 文學類目下有 文學理論 中國古典詩歌。 這些要是直接寫死在網站裏面的話,不利於後面去添加和修改分類,這樣做的話是非常不利於後期網站維護的。那麽有什麽辦法把兩級分類數據都通過去後臺輸入,前臺去讀取呢?也就是這些分類存在數據庫中,實現動態讀取。
找了些資料,然後我整合下,終於可以應用到自己的網站了。 用的是Listview或者datalist嵌套。我這裏就用我的圖書網站為例。 用datalist實現二級嵌套。
實現原理
先看看效果圖
一.數據庫設計
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
{
}
//這是datalist1的DataList1_ItemDataBound 事件的代碼
//千萬不要寫在page—load裏面直接綁定哦。
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嵌套的方法實現二級菜單的分類導航