您的位置:首页 > 编程语言 > ASP

Asp.net 用datalist嵌套的方法实现二级菜单的分类导航

2014-03-13 21:20 881 查看
刚开始学习Asp.net做网站的时候, 做的是一个电子图书购买网站,发现图书有多级类目。 例如:小说分类下面世界名著,中国古典小说....... 文学类目下有 文学理论 中国古典诗歌。 这些要是直接写死在网站里面的话,不利于后面去添加和修改分类,这样做的话是非常不利于后期网站维护的。那么有什么办法把两级分类数据都通过去后台输入,前台去读取呢?也就是这些分类存在数据库中,实现动态读取。

找了些资料,然后我整合下,终于可以应用到自己的网站了。 用的是Listview或者datalist嵌套。我这里就用我的图书网站为例。 用datalist实现二级嵌套。

实现原理 是在pageload 事件下加载一级分类, 然后在一级分类datalist1的onitemdatabound事件下去读取一级分类的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

{

}

//这是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;

}

在这里起到抛砖引玉的作用,希望大神能够不耻下问,完善。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: