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

刚开始学习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;

}

在这里起到抛砖引玉的作用,希望大神能够不耻下问,完善。

原文地址:https://www.cnblogs.com/imPedro/p/9271303.html

时间: 2024-08-24 11:35:55

【转】Asp.net 用datalist嵌套的方法实现二级菜单的分类导航的相关文章

不修改代码就能优化ASP.NET网站性能的一些方法

阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不需要修改程序代码的.它们主要分为二个方面:1. 利用ASP.NET自身的扩展性进行优化.2. 优化IIS设置. 回到顶部 配置OutputCache 用缓存来优化网站性能的方法,估计是无人不知的. ASP.NET提供了HttpRuntime.Cache对象来缓存数据,也提供了OutputCache指

ASP.Net string 类的扩展方法 [转]

string 类的扩展方法列表(基本相同于 IEnumerable<T> 接口的成员列表): Aggregate<>     //累加 All<>        //是否都满足条件 Any<>        //是否有一个满足条件 AsEnumerable<>  // AsParallel<>    // AsQueryable<>    // Average<>      //平均值 Cast<>

ASP.NET页面优化性能提升方法记录

今天与大家分享:一种优化页面执行速度的方法.采用这个方法,可以使用页面的执行速度获得[8倍]的提升效果. 为了让您对优化的效果有个直观的了解,我准备了下面的测试结果截图: 测试环境:1. Windows Server 2003 SP22. Viaual Studio 2008,使用自带的WebDev.WebServer.EXE运行网站程序.3. (ThinkPad SL510):Core2 T6670 2.2GHz, 4G内存 二个红框中的数字反映了优化前后的执行时间.数字表明:优化前后,执行时

ASP.NET页面刷新的实现方法总结

先看看ASP.NET页面刷新的实现方法: 第一: C#代码   private void Button1_Click( object sender, System.EventArgs e ) { Response.Redirect( Request.Url.ToString( ) ); } 第二: C#代码   private void Button2_Click( object sender, System.EventArgs e ) { Response.Write( " < scri

关于asp.net MVC 中的TryUpdateModel方法

有比较才会有收货,有需求才会发现更多. 在传统的WebFormk开发工作中,我们常常会存在如下的代码块 //保存 protected void btnSubmit_Click(object sender, EventArgs e) { try { BLL.MoneyBll cun = new BLL.MoneyBll(); Model.Money m1 = new Model.Money(); m1.Commany = int.Parse(this.Commany.Text); m1.Count

asp中Server.MapPath的使用方法

老是忘记Server.MapPath的使用方法了,下面记录一下,以备后用: 总注:Server.MapPath获得的路径都是服务器上的物理路径,也就是常说的绝对路径 1.Server.MapPath("/") 注:获得应用程序根目录所在的位置,如 C:\Inetpub\wwwroot\. 2.Server.MapPath("./") 注:获得所在页面的当前目录,等价于Server.MapPath(""). 3.Server.MapPath(&qu

网页绘制图表 Google Charts with JavaScript #2 ....与ASP.NET网页结合 (ClientScriptManager.RegisterStartupScript 方法)

此为文章备份,原文出处(我的网站) 网页绘制图表 Google Charts with JavaScript #2 ....与ASP.NET网页结合 (ClientScriptManager.RegisterStartupScript 方法) http://www.dotblogs.com.tw/mis2000lab/archive/2014/05/10/google_charts-with-asp.net-clientscriptmanager.registerstartupscript.as

ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

原文:ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view) 在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie.cs文件,并添加高亮行如下所示: using System; using System.ComponentModel.DataAnnotations; using System.Data.

asp.net中导出Execl的方法

一.asp.net中导出Execl的方法: 在 asp.net中导出Execl有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址 输出在浏览器上:一种是将文件直接将文件输出流写给浏览器.在Response输出时,\t分隔的数据,导出 execl时,等价于分列,\n等价于换行. 1.将整个html全部输出execl 此法将html中所有的内容,如按钮,表格,图片等全部输出到Execl中.   Response.Clear();       Response.Buffer=