分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

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

发布时间:2023-09-06 02:02责任编辑:郭大石关键词:暂无标签

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

    }

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

???????????

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

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved