• ASP.NET Repeater_02_完整分页


    本文内容

    • 分页基本1
    • 分页基本2
    • 分页按钮在 Repeater 控件内
    • 分页按钮在 Repeater 控件外

    分页基本1

    <%@ Page Language="C#" %>
     
    <%@ Import Namespace="System.Data" %>
    <!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>
     
        <script runat="server">
       1:  
       2:         private void BindData()
       3:         {
       4:             DataTable dt = ASPDotNetRepeater.DataSource.CreateEMPDataSource();
       5:             PagedDataSource pds = new PagedDataSource();
       6:             pds.DataSource = dt.DefaultView;
       7:             pds.AllowPaging = true;
       8:             pds.PageSize = 2;
       9:             int CurPage;
      10:             if (Request.QueryString["Page"] != null)
      11:             {
      12:                 CurPage = Convert.ToInt32(Request.QueryString["Page"]);
      13:             }
      14:             else
      15:             {
      16:                 CurPage = 1;
      17:             }
      18:             pds.CurrentPageIndex = CurPage - 1;
      19:             int Count = pds.PageCount;
      20:             CurrentPage.Text = "当前页:" + CurPage.ToString();
      21:             PageSize.Text = Count.ToString();
      22:             if (!pds.IsFirstPage)
      23:             {
      24:                 this.First.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=1";
      25:                 this.Last.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(Count - 1); ;
      26:                 Front.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage - 1);
      27:             }
      28:             else
      29:             {
      30:                 this.First.Visible = false;
      31:                 this.Last.Visible = false;
      32:             }
      33:             if (!pds.IsLastPage)
      34:             {
      35:                 Next.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage + 1);
      36:             }
      37:             else
      38:             {
      39:                 this.First.Visible = false;
      40:                 this.Last.Visible = false;
      41:             }
      42:             Repeater1.DataSource = pds;
      43:             Repeater1.DataBind();
      44:         }
      45:         protected void Page_Load(object sender, EventArgs e)
      46:         {
      47:             if (!IsPostBack)
      48:             {
      49:                 if (!IsPostBack)
      50:                 {
      51:                     BindData();
      52:                     this.First.Visible = true;
      53:                     this.Last.Visible = true;
      54:                 }
      55:             }
      56:         }
      57:     
    </script>
     
    </head>
    <body>
        <form id="form1" runat="server">
        <table>
            <tr>
                <td align="left">
                    Repeater 控件
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Repeater ID="Repeater1" runat="server">
                        <HeaderTemplate>
                            <table>
                                <tr>
                                    <td>
                                        自定义头模板
                                    </td>
                                </tr>
                        </HeaderTemplate>
                        <ItemTemplate>
                            <tr>
                                <td>
                                    <a href='Rec.aspx?id=<%#Eval("EMPNO") %>' target="_blank">
                                        <%
       1: #Eval("ENAME")
    %></a>
                                </td>
                            </tr>
                        </ItemTemplate>
                        <AlternatingItemTemplate>
                            <tr>
                                <td>
                                    <a href='Rec.aspx?id=<%#Eval("EMPNO") %>' target="_blank">
                                        <%
       1: #Eval("ENAME")
    %></a>
                                </td>
                            </tr>
                        </AlternatingItemTemplate>
                        <FooterTemplate>
                            <tr>
                                <td>
                                    自定义尾模板
                                </td>
                            </tr>
                            </table>
                        </FooterTemplate>
                    </asp:Repeater>
                </td>
            </tr>
            <tr>
                <td>
                    <asp:HyperLink ID="First" runat="server">首页</asp:HyperLink>
                    <asp:HyperLink ID="Front" runat="server">上一页</asp:HyperLink>
                    <asp:HyperLink ID="Next" runat="server">下一页</asp:HyperLink>
                    <asp:HyperLink ID="Last" runat="server">尾页</asp:HyperLink>
                </td>
            </tr>
            <tr>
                <td>
                    当前页为:<asp:Label ID="CurrentPage" runat="server" Text="Label"></asp:Label><br />
                    <asp:Label ID="PageSize" runat="server" Text="Label"></asp:Label>
                </td>
            </tr>
        </table>
        </form>
    </body>
    </html>
    说明

    (1) Repeater 控件本身没有分页功能,但与其他类似的控件相比,它是比较底层的控件,尤其是它的分页功能;

    (2) PagedDataSource 类的数据源必须是视图,如 DataTable.DefaultView,不能是 DataTable;

    (3) 下一页、上一页等分页按钮不在 Repeater 里,而且分页的操作都在 BindData() 方法。

    分页基本2

    <%@ Page Language="C#" %>
     
    <%@ Import Namespace="System.Data" %>
    <!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>
     
        <script runat="server">
       1:  
       2:         public void BindData()
       3:         {
       4:             DataTable dt = ASPDotNetRepeater.DataSource.CreateEMPDataSource();
       5:             PagedDataSource pds = new PagedDataSource();
       6:             pds.DataSource = dt.DefaultView;
       7:             pds.AllowPaging = true;
       8:             pds.PageSize = 2;
       9:  
      10:             int curpage = Convert.ToInt32(CurrentPage.Text);
      11:             this.Next.Enabled = true;
      12:             this.Front.Enabled = true;
      13:             pds.CurrentPageIndex = curpage - 1;
      14:             if (curpage == 1)
      15:             {
      16:                 this.Front.Enabled = false;
      17:             }
      18:             if (curpage == pds.PageCount)
      19:             {
      20:                 this.Next.Enabled = false;
      21:             }
      22:             this.Repeater1.DataSource = pds;
      23:             this.Repeater1.DataBind();
      24:         }
      25:         protected void Page_Load(object sender, EventArgs e)
      26:         {
      27:             if (!IsPostBack)
      28:             {
      29:                 CurrentPage.Text = "1";
      30:                 BindData();
      31:             }
      32:         }
      33:         protected void Front_Click(object sender, EventArgs e)
      34:         {
      35:             this.CurrentPage.Text = Convert.ToString(Convert.ToInt32(CurrentPage.Text) - 1);
      36:             BindData();
      37:         }
      38:         protected void Next_Click(object sender, EventArgs e)
      39:         {
      40:             this.CurrentPage.Text = Convert.ToString(Convert.ToInt32(CurrentPage.Text) + 1);
      41:             BindData();
      42:         }
      43:     
    </script>
     
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:Repeater ID="Repeater1" runat="server">
            <HeaderTemplate>
                <table>
                    <tr>
                        <td>
                            自定义头模板
                        </td>
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td>
                        员工编号:<%
       1: # Eval("EMPNO") 
    %>
                    </td>
                    <td>
                        员工姓名:<%
       1: # Eval("ENAME") 
    %>
                    </td>
                </tr>
            </ItemTemplate>
            <FooterTemplate>
                <tr>
                    <td>
                        自定义脚模板
                    </td>
                </tr>
                </table>
            </FooterTemplate>
        </asp:Repeater>
        当前页:<asp:Label ID="CurrentPage" runat="server"></asp:Label>
        <br />
        <asp:Button ID="Front" runat="server" OnClick="Front_Click" Text="上一页" />
        <asp:Button ID="Next" runat="server" OnClick="Next_Click" Text="下一页" />
        </form>
    </body>
    </html>
    说明

    (1) 本例通过单击两个按钮,查看上一页和下一页的内容;

    (2) Repeater 控件通过 PagedDataSource 实现分页功能。一些本身具有分页功能的控件,如 GridView,也都是使用了 PagedDataSource 类,所以 PagedDataSource 是比较底层的一个类;

    分页按钮在 Repeater 控件内

    <%@ Page Language="C#" %>
     
    <%@ Import Namespace="System.Data" %>
    <!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>
     
        <script runat="server">
       1:  
       2:         private PagedDataSource pds()
       3:         {
       4:             DataTable dt = ASPDotNetRepeater.DataSource.CreateEMPDataSource();
       5:             PagedDataSource pds = new PagedDataSource();
       6:             pds.DataSource = dt.DefaultView;
       7:             pds.AllowPaging = true;
       8:             pds.PageSize = 2;
       9:             pds.CurrentPageIndex = Convert.ToInt32(Request.QueryString["page"]);
      10:             return pds;
      11:         }
      12:         protected void Page_Load(object sender, EventArgs e)
      13:         {
      14:             if (!IsPostBack)
      15:             {
      16:                 Repeater1.DataSource = pds();
      17:                 Repeater1.DataBind();
      18:             }
      19:         }
      20:         protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
      21:         {
      22:             if (e.Item.ItemType == ListItemType.Footer)
      23:             {
      24:                 DropDownList jump = (DropDownList)e.Item.FindControl("Jump");
      25:                 HyperLink first = (HyperLink)e.Item.FindControl("First");
      26:                 HyperLink front = (HyperLink)e.Item.FindControl("Front");
      27:                 HyperLink next = (HyperLink)e.Item.FindControl("Next");
      28:                 HyperLink last = (HyperLink)e.Item.FindControl("Last");
      29:                 Label currentPage = (Label)e.Item.FindControl("CurrentPage");
      30:                 Label pageSize = (Label)e.Item.FindControl("PageSize");
      31:  
      32:                 PagedDataSource pds = this.pds();
      33:                 pds.CurrentPageIndex = jump.SelectedIndex;
      34:                 int n = Convert.ToInt32(pds.PageCount);
      35:                 int i = Convert.ToInt32(pds.CurrentPageIndex);
      36:                 currentPage.Text = Convert.ToString(pds.CurrentPageIndex + 1);
      37:                 pageSize.Text = n.ToString();
      38:  
      39:                 if (!IsPostBack)
      40:                 {
      41:                     for (int j = 0; j < n; j++)
      42:                     {
      43:                         jump.Items.Add(Convert.ToString(j + 1));
      44:                     }
      45:                 }
      46:                 if (i <= 0)
      47:                 {
      48:                     first.Enabled = false;
      49:                     front.Enabled = false;
      50:                     last.Enabled = true;
      51:                     next.Enabled = true;
      52:                 }
      53:                 else
      54:                 {
      55:                     front.NavigateUrl = "?page=" + (i - 1);
      56:                 }
      57:                 if (i >= n - 1)
      58:                 {
      59:                     first.Enabled = true;
      60:                     last.Enabled = false;
      61:                     next.Enabled = false;
      62:                     front.Enabled = true;
      63:                 }
      64:                 else
      65:                 {
      66:                     next.NavigateUrl = "?page=" + (i + 1);
      67:                 }
      68:                 first.NavigateUrl = "?page=0";
      69:                 last.NavigateUrl = "?page=" + (n - 1);
      70:                 jump.SelectedIndex = Convert.ToInt32(pds.CurrentPageIndex);
      71:             }
      72:         }
      73:         protected void Jump_SelectedIndexChanged(object sender, EventArgs e)
      74:         {
      75:             string pageIndex = Convert.ToString((Convert.ToInt32(((DropDownList)sender).SelectedValue) - 1));
      76:             Response.Redirect("PagingUsingRepeaterHandle.aspx?page=" + pageIndex);
      77:         }
      78:     
    </script>
     
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
            <HeaderTemplate>
                <table width="500">
                    <tr>
                        <td>
                            员工姓名
                        </td>
                        <td>
                            出生日期
                        </td>
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td>
                        <a href='Rec.aspx?id=<%# Eval("EMPNO")%>'>
                            <%
       1: # Eval("ENAME") 
    %></a>
                    </td>
                    <td>
                        <%
       1: # Eval("HIREDATE")
    %>
                    </td>
                </tr>
            </ItemTemplate>
            <SeparatorTemplate>
                <tr>
                    <td colspan="2">
                        <hr style="border-top: 1pt;" />
                    </td>
                </tr>
            </SeparatorTemplate>
            <FooterTemplate>
                <tr>
                    <td colspan="2" style="font-size: 12pt">
                        <asp:HyperLink ID="First" runat="server" Text="首页"></asp:HyperLink>
                        <asp:HyperLink ID="Front" runat="server" Text="上一页"></asp:HyperLink>
                        <asp:HyperLink ID="Next" runat="server" Text="下一页"></asp:HyperLink>
                        <asp:HyperLink ID="Last" runat="server" Text="尾页"></asp:HyperLink>
                        <asp:Label ID="CurrentPage" runat="server" Text="Label"></asp:Label>页 共<asp:Label
                            ID="PageSize" runat="server" Text="Label"></asp:Label>页 跳至第<asp:DropDownList ID="Jump"
                                runat="server" AutoPostBack="true" OnSelectedIndexChanged="Jump_SelectedIndexChanged">
                            </asp:DropDownList>
                    </td>
                </tr>
                </table>
            </FooterTemplate>
        </asp:Repeater>
        </form>
    </body>
    </html>

    分页按钮在 Repeater 控件外

    <%@ Page Language="C#" %>
     
    <%@ Import Namespace="System.Data" %>
    <!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>
     
        <script runat="server">
       1:  
       2:         protected void Page_Load(object sender, EventArgs e)
       3:         {
       4:             if (!IsPostBack)
       5:             {
       6:                 this.CurrentPage.Text = "1";
       7:                 this.BindData();
       8:             }
       9:         }
      10:         public void BindData()
      11:         {
      12:             DataTable dt = ASPDotNetRepeater.DataSource.CreateEMPDataSource();
      13:             PagedDataSource pds = new PagedDataSource();
      14:             pds.DataSource = dt.DefaultView;
      15:             pds.AllowPaging = true;
      16:             pds.PageSize = 2;
      17:             pds.CurrentPageIndex = Convert.ToInt32(this.CurrentPage.Text) - 1;
      18:  
      19:             PageSize.Text = pds.PageCount.ToString();
      20:             CurrentPage.Text = (pds.CurrentPageIndex + 1).ToString();
      21:             this.Front.Enabled = true;
      22:             this.First.Enabled = true;
      23:             this.Next.Enabled = true;
      24:             this.Last.Enabled = true;
      25:  
      26:  
      27:             if (!IsPostBack)
      28:             {
      29:                 for (int j = 0; j < pds.PageCount; j++)
      30:                 {
      31:                     this.Jump.Items.Add(Convert.ToString(j + 1));
      32:                 }
      33:             }
      34:  
      35:             if (pds.CurrentPageIndex < 1)
      36:             {
      37:                 this.Front.Enabled = false;
      38:                 this.First.Enabled = false;
      39:             }
      40:             if (pds.CurrentPageIndex == pds.PageCount - 1)
      41:             {
      42:                 this.Next.Enabled = false;
      43:                 this.Last.Enabled = false;
      44:             }
      45:             Repeater1.DataSource = pds;
      46:             Repeater1.DataBind();
      47:         }
      48:         protected void First_Click(object sender, EventArgs e)
      49:         {
      50:             this.CurrentPage.Text = "1";
      51:             this.BindData();
      52:         }
      53:         protected void Front_Click(object sender, EventArgs e)
      54:         {
      55:             this.CurrentPage.Text = Convert.ToString(Convert.ToInt32(CurrentPage.Text) - 1);
      56:             this.BindData();
      57:         }
      58:         protected void Next_Click(object sender, EventArgs e)
      59:         {
      60:             this.CurrentPage.Text = Convert.ToString(Convert.ToInt32(CurrentPage.Text) + 1);
      61:             this.BindData();
      62:         }
      63:         protected void Last_Click(object sender, EventArgs e)
      64:         {
      65:             this.CurrentPage.Text = this.PageSize.Text;
      66:             this.BindData();
      67:         }
      68:         protected void Jump_SelectedIndexChanged(object sender, EventArgs e)
      69:         {
      70:             string pageIndex = Convert.ToString((Convert.ToInt32(((DropDownList)sender).SelectedValue) - 1));
      71:             this.CurrentPage.Text = pageIndex;
      72:             this.BindData();
      73:         }
      74:     
    </script>
     
    </head>
    <body>
        <form id="form1" runat="server">
        <table>
            <asp:Repeater ID="Repeater1" runat="server">
                <ItemTemplate>
                    <tr>
                        <%
       1: --前台也可以调用后台的自定义函数--
    %>
                        <td>
                            <a href="">
                                <%
       1: # DataBinder.Eval(Container.DataItem,"[EMPNO]")
    %></a>
                        </td>
                        <td>
                            <a href="">
                                <%
       1: # DataBinder.Eval(Container.DataItem,"[ENAME]")
    %></a>
                        </td>
                    </tr>
                </ItemTemplate>
            </asp:Repeater>
        </table>
        <table border="1">
            <tr>
                <td>
                    <asp:LinkButton ID="First" runat="server" OnClick="First_Click">页首</asp:LinkButton>
                    <asp:LinkButton ID="Front" runat="server" OnClick="Front_Click">上一页</asp:LinkButton>
                    <asp:LinkButton ID="Next" runat="server" OnClick="Next_Click">下一页</asp:LinkButton>
                    <asp:LinkButton ID="Last" runat="server" OnClick="Last_Click">页尾</asp:LinkButton>
    <asp:Label ID="CurrentPage" runat="server" Text="Label"></asp:Label>页/共<asp:Label
                        ID="PageSize" runat="server" Text="Label"></asp:Label>页 跳至<asp:DropDownList ID="Jump"
                            runat="server" AutoPostBack="true" OnSelectedIndexChanged="Jump_SelectedIndexChanged">
                        </asp:DropDownList>
                </td>
            </tr>
        </table>
        </form>
    </body>
    </html>
    说明

    (1) 将分页按钮放在了 Repeater 的 FooterTemplate,所以要实现分页功能,就需要 Repeater 的 ItemDataBound 事件,该事件在数据绑定后,并在数据显示前出发;

    (2) 必须用视图 DataTable.DefaultView 给 PagedDataSource.DataSource 赋值;

    (3) 传递页码的方式是采用通过超链接向当前页面传参数。

    下载 Demo

  • 相关阅读:
    Java中static、final、static final的区别(转)
    Google的JSON风格指南
    Google代码风格指南
    Java中的final关键字(转)
    Java的不定参数(eg:Object...)(转)
    Java Enum枚举的用法(转)
    Java中包装类型和基本类型的使用场景(什么时候使用包装类型)(转)
    Java常用的集合类(转)
    使用Swagger生成Spring Boot REST客户端(支持Feign)(待实践)
    Java搜索引擎选择: Elasticsearch与Solr(转)
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2160065.html
Copyright © 2020-2023  润新知