`
webcode
  • 浏览: 5950357 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

repeater 实现镶嵌和分页

 
阅读更多


repeater控件是Web服务器控件中的一个容器控件,它使您可以从页的任何可用数据中创建出自定义列表。Repeater不具备内置的呈现功能,这表示用户必须通过创建模板为Repeater控件提供布局。当该页运行时,repeater控件依次通过数据源中的记录呈现一个项。

假设我们显示复杂的数据可以用gridview,一般复杂的用dataList,那么简单的数据呈现呢?我们就用repeater,因为它简单、小巧、最主要是灵活。

repeater支持的模板:


例子:

说明:用到的数据库为pubs数据中的authors和titileauthor。

页面的设计如图所示:

html代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="1.aspx.cs" Inherits="Repeater._1" %>

<!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>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Repeater ID="Repeater1" runat="server" 
            onitemdatabound="Repeater1_ItemDataBound">
        <HeaderTemplate>
            <table width="500">
            <tr style="background-color:#ccffcc">
                <td>作者</td>
                <td>书籍</td>
            </tr>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td><a href='aaa.aspx?id=<%# Eval("au_id") %>'><%#Eval("au_lname") %></a></td>
                <td>
                    <asp:Repeater ID="Repeater2" runat="server" DataSource='<%#Eval("myrela") %>'>
                        <ItemTemplate>
                            <%--<%#Eval("[\"title_id\"]") %><br />--%>
                            <%#Eval("title_id") %><br />
                        </ItemTemplate>
                    </asp:Repeater>
                </td>
            </tr>
        </ItemTemplate>
        <SeparatorTemplate>
            <tr>
                <td colspan="2">
                    <hr size="1pt" />
                </td>
            </tr>
        </SeparatorTemplate>
        <FooterTemplate>
            <tr>
                <td colspan="2" style="font-size:12pt; color:#0099ff; background-color:#e6feda;">共<asp:Label ID="lblpc" runat="server" Text="Label"></asp:Label>页 当前为第<asp:Label ID="lblp" runat="server" Text="Label"></asp:Label>页
                    <asp:HyperLink ID="hlfir" runat="server" Text="首页"></asp:HyperLink>
                    <asp:HyperLink ID="hlp" runat="server" Text="上一页"></asp:HyperLink>
                    <asp:HyperLink ID="hln" runat="server" Text="下一页"></asp:HyperLink>
                    <asp:HyperLink ID="hlla" runat="server" Text="末页"></asp:HyperLink>
                </td>
            </tr>
        </table>
        </FooterTemplate>
        
        </asp:Repeater>
    </div>
    </form>
</body>
</html>

页面的后台代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace Repeater
{
    public partial class _1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Repeater1.DataSource = pds();
                Repeater1.DataBind();
            }
        }
        private PagedDataSource pds()
        {
            string connstring = ConfigurationManager.ConnectionStrings["pubsConnectionString"].ConnectionString;
            SqlConnection con = new SqlConnection(connstring);
            SqlDataAdapter sda = new SqlDataAdapter("select * from authors", con);
            DataSet ds = new DataSet();
            sda.Fill(ds, "name");

            SqlDataAdapter sda2 = new SqlDataAdapter("select * from titleauthor", con);
            sda2.Fill(ds, "title");

            //为上面建立的两个表创建一个关系,指明父列和子列的名称并为他们的关系命名,前面将会用到
            ds.Relations.Add("myrela", ds.Tables["name"].Columns["au_id"], ds.Tables["title"].Columns["au_id"]);

            PagedDataSource pds = new PagedDataSource();
            pds.DataSource = ds.Tables["name"].DefaultView;
            pds.AllowPaging = true;
            pds.PageSize = 5;
            pds.CurrentPageIndex = Convert.ToInt32(Request.QueryString["page"]);
            return pds;
        }

        protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType== ListItemType.Footer)
            {
                int n = pds().DataSourceCount;
                int i = pds().CurrentPageIndex;

                Label lblpc = (Label)e.Item.FindControl("lblpc");
                lblpc.Text = n.ToString();

                Label lblp = (Label)e.Item.FindControl("lblp");
                lblp.Text = Convert.ToString(pds().CurrentPageIndex + 1);

                HyperLink hlfir = (HyperLink)e.Item.FindControl("hlfir");
                hlfir.NavigateUrl="?page=0";
                HyperLink hlla = (HyperLink)e.Item.FindControl("hlla");
                hlla.NavigateUrl = "?page=" + Convert.ToInt32(n-1);

                HyperLink hlp = (HyperLink)e.Item.FindControl("hlp");
                HyperLink hln = (HyperLink)e.Item.FindControl("hln");

                if (i<=0)
                {
                    hlfir.Enabled = false;
                    hlp.Enabled = false;
                    hln.Enabled = true;
                }
                else
                {
                    hlp.NavigateUrl = "?page=" + Convert.ToInt32(i-1);
                }

                if (i>n-2)
                {
                    hln.Enabled = false;
                    hlla.Enabled = false;
                    hlp.Enabled = true;
                }
                else
                {
                    hln.NavigateUrl = "?page=" + Convert.ToInt32(i+1);
                }
            }
        }
    }
}


显示效果如图:


总结:其实在前一段时间repeater控件用得挺多的,不过一些功能在做这个例子之前没有弄过,比如说通过代码实现分页(以前是用的分页控件。)、还有repeater的镶嵌、通过dataset让两个表建立关系、还有就是让repeater变得更加漂亮。(感觉那个订餐系统还可以再美观一下,呵呵。)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics