ASP.NET 2.0 之在Repeater中嵌套使用Repeater

来源:互联网 发布:Linux的loop 编辑:程序博客网 时间:2024/05/20 02:28

在一般的网站中浏览类别的用户控件通常都位于大多数 ASP.NET 页的左边,它使用户能够按类别快速的查找产品。最近遇到一个客户,因为在他网站上展示的产品并不多,所以要求在原有类别浏览的基础上将产品也加进去。一来更方便,二来加长了左部导航栏的长度使页面更协调。原有的分类导航栏是由Repeater实现的,现在需要在每一个分类下加入该类的商品信息,于是我想到了在原有Repeater中嵌套Repeater。实现界面如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
    <style type="text/css">
    <!--
    body {font-size: 12px;}
    -->
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <h3 align="center">在Repeater中嵌套使用Repeater </h3>实现界面如下:<br />
        <br />
    <div>
        <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
        <HeaderTemplate>
            <TABLE borderColor=#e5e3e3 cellSpacing=0 cellPadding=3 width=790 align=center border=1>
        </HeaderTemplate>
        <ItemTemplate>
            <!--分类名称-->
            <TR><TD align="left" width=200><%#Eval("Assort_title")%></TD> </TR>
            <!--分类下所属的产品-->
            <asp:Repeater ID="Repeater2" runat="server">
            <ItemTemplate>
                <TR><TD align="center" width=200><a href="#"><!--传<%#Eval("Assort_id")%>链接到另一页面--><%#Eval("Assort_title")%></a></TD> </TR>
            </ItemTemplate>
            </asp:Repeater>
        </ItemTemplate>
        <FooterTemplate>
            </TABLE>
        </FooterTemplate>
        </asp:Repeater>
    </div>
    友情提示:此示例有数据库 源本是:Assort.sql
    </form>
</body>
</html>

后台事件代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
//------导包
using System.Text;
using System.Data.SqlClient;
using System.Collections.Generic;

public partial class Default4 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection("server=(local);database=aben;uid=sa;pwd=sa;");
        SqlDataAdapter adapter = new SqlDataAdapter("select * from assort where assort_level = 1", con);
        DataSet ds = new DataSet();
        adapter.Fill(ds, "assort");
        Repeater1.DataSource = ds;
        Repeater1.DataBind();
    }
    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        //BLL.Products products = new BLL.Products();
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Repeater rep = (Repeater)e.Item.FindControl("Repeater2");
            //找到分类Repeater关联的数据项
            DataRowView row = (DataRowView)e.Item.DataItem;
            //提取分类ID
            int Id = Convert.ToInt32(row["Assort_id"]);
            //根据分类ID查询该分类下的产品,并绑定产品Repeater
            rep.DataSource = this.Getlist(Id);
            rep.DataBind();
        }
    }

    //考虑到代码简洁与清晰 这里就不分层了

    public IList<Assort> Getlist(int nid)
    {
        StringBuilder strSql = new StringBuilder();
        strSql.Append("select * from assort");
        strSql.Append(" where Assort_nid=" + nid);
        strSql.Append(" order by assort_id desc");
        //一般是按时间字段降序排列的 本表中没有时间字段就以ID为准
        IList<Assort> assorts = new List<Assort>();

        SqlConnection con = new SqlConnection("server=(local);database=aben;uid=sa;pwd=sa;");
        con.Open();
        SqlCommand cmd = new SqlCommand(strSql.ToString(), con);
        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            Assort model = new Assort();
            model.Assort_id = int.Parse(reader["Assort_id"].ToString());
            model.Assort_nid = int.Parse(reader["Assort_nid"].ToString());
            model.Assort_title = reader["Assort_title"].ToString();
            model.Assort_level = int.Parse(reader["Assort_level"].ToString());
            assorts.Add(model);
        }
        return assorts;
    }
}

实体Assort.cs:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Assort 的摘要说明
/// </summary>
public class Assort
{
 public Assort()
 {
 }

    private int _assort_id;
    private int _assort_nid;
    private string _assort_title;
    private int _assort_level;

    /// <summary>
    /// 序号自动增加列
    /// </summary>
    public int Assort_id
    {
        get { return _assort_id; }
        set { _assort_id = value; }
    }
    /// <summary>
    /// 所属序号
    /// </summary>
    public int Assort_nid
    {
        get { return _assort_nid; }
        set { _assort_nid = value; }
    }
    /// <summary>
    /// 标题信息
    /// </summary>
    public string Assort_title
    {
        get { return _assort_title; }
        set { _assort_title = value; }
    }
    /// <summary>
    /// 分类级别
    /// </summary>
    public int Assort_level
    {
        get { return _assort_level; }
        set { _assort_level = value; }
    }

}

数据库源本:
USE PUBS
GO

--无限级分类表
CREATE TABLE Assort
(
 Assort_id INT  IDENTITY(1,1) PRIMARY KEY, --序号 自动增加列
 Assort_nid INT  NOT NULL,   --所属序号
 Assort_title VARCHAR(50) NOT NULL,   --标题信息
 Assort_level INT  NOT NULL   --分类级别
)
GO

SELECT * FROM Assort

--一极标题
INSERT INTO Assort VALUES(0,'新闻',1)
INSERT INTO Assort VALUES(0,'邮箱',1)
INSERT INTO Assort VALUES(0,'博客',1)

--二极标题所属新闻
INSERT INTO Assort VALUES(1,'八卦新闻',2)
INSERT INTO Assort VALUES(1,'国内新闻',2)
INSERT INTO Assort VALUES(1,'国际新闻',2)

--二极标题所属邮箱
INSERT INTO Assort VALUES(2,'免费邮箱',2)
INSERT INTO Assort VALUES(2,'会员邮箱',2)
INSERT INTO Assort VALUES(2,'企业邮箱',2)

--二极标题所属博客
INSERT INTO Assort VALUES(3,'个人博客',2)
INSERT INTO Assort VALUES(3,'趣味博客',2)
INSERT INTO Assort VALUES(3,'媒体博客',2)

--三四级分类依次类推掌握设计原理就OK

--查看所有的数据
SELECT * FROM Assort
 

原创粉丝点击