码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2018-07-06 01:21:06      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:外键   const   自己的   网站维护   com   ack   book   text   size   

 

          刚开始学习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嵌套的方法实现二级菜单的分类导航

标签:外键   const   自己的   网站维护   com   ack   book   text   size   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!