ASP.NET中Repeater控制元件實現分頁功能
Repeater
輕量級,完全的自定義
Repeater分頁,需要依靠PagedDataSource。這個類存在於System.Web.UI.WebControls名稱空間。它的作用是作為資料來源與資料顯示控制元件的中間介質。如:
資料來源->PagedDataSource->資料繫結控制元件
之間的關係通過以下程式碼來實現:
PagedDataSource pds=new PagedDataSource ();
pds.DataSource=dataTable;
repeater1.DataSource=pds;
repeater1.DataBind();
三者之間發生關係的程式碼就是這些。
那麼PagedDataSource又是怎樣工作的呢?MSDN上面也沒有講。這僅僅是我的推斷。
PagedDataSource封裝了從底層資料來源(如:DataTable)中取出第幾頁資料的中間過程。我們只需設定
PagedDataSource .AllowPaging=true;
PagedDataSource .PageSize=xx;
PagedDataSource.CurrentPageIndex=currentPage;
就可以取出指定頁的資料,而資料繫結控制元件將從PagedDataSource 中獲取這些資料以顯示。PagedDataSource 在這裡成一箇中介。而資料繫結元件如何取資料,PagedDataSource 是如何分頁,並取出對應的資料,這個是asp.net框架內部實現,對我們完全透明。
另一個需要著重講的是,PagedDataSource 中頁號是從0開始的,並不是從1開始。
下面我們來看一個例子:
前臺的程式碼:
//repeate.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="repeate.aspx.cs" Inherits="repeate" %>
<%@ 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>
</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='repeate.aspx?id=<%# Eval("au_id")%>'><%# Eval("au_lname") %></a></td>
<td><asp:Repeater ID="Repeater2" runat="server" DataSource='<%# Eval("myrela") %>'>
<ItemTemplate>
<%# Eval("[/"title_id/"]") %>
</ItemTemplate>
</asp:Repeater>
</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;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>
跳至第
<asp:DropDownList ID="ddlp" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlp_SelectedIndexChanged" >
</asp:DropDownList>頁
</td>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
下面的是後臺的程式碼:
//repeate.aspx.cs
using System;
using System.Data;
using System.Data.SqlClient;
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;
public partial class repeate : 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["pconn"].ConnectionString;
SqlConnection con = new SqlConnection(connstring);
DataSet ds = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter("select * from authors",con);
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)
{
DropDownList ddlp = (DropDownList)e.Item.FindControl("ddlp");
HyperLink lpfirst = (HyperLink)e.Item.FindControl("hlfir");
HyperLink lpprev = (HyperLink)e.Item.FindControl("hlp");
HyperLink lpnext = (HyperLink)e.Item.FindControl("hln");
HyperLink lplast = (HyperLink)e.Item.FindControl("hlla");
pds().CurrentPageIndex = ddlp.SelectedIndex;
int n = Convert.ToInt32(pds().PageCount);//n為分頁數
int i = Convert.ToInt32(pds().CurrentPageIndex);//i為當前頁
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);
if (!IsPostBack)
{
for (int j = 0; j < n; j++)
{
ddlp.Items.Add(Convert.ToString(j + 1));
}
}
if (i <= 0)
{
lpfirst.Enabled = false;
lpprev.Enabled = false;
lplast.Enabled = true;
lpnext.Enabled = true;
}
else
{
lpprev.NavigateUrl = "?page=" + (i - 1);
}
if (i >= n - 1)
{
lpfirst.Enabled = true;
lplast.Enabled = false;
lpnext.Enabled = false;
lpprev.Enabled = true;
}
else
{
lpnext.NavigateUrl = "?page=" + (i + 1);
}
lpfirst.NavigateUrl = "?page=0";//向本頁傳遞引數page
lplast.NavigateUrl = "?page=" + (n - 1);
ddlp.SelectedIndex = Convert.ToInt32(pds().CurrentPageIndex);//更新下拉選單框中的當前選中頁序號
}
}
protected void ddlp_SelectedIndexChanged(object sender, EventArgs e)
{//腳模板中的下拉選單框更改時激發
string pg=Convert.ToString((Convert.ToInt32(((DropDownList)sender).SelectedValue)-1));//獲取列表框當前選中項
Response.Redirect("repeate.aspx?page="+pg);//頁面轉向
}
}
相關文章
- Repeater控制元件的分頁實現控制元件
- aspnetpager+repeater+oracle實現分頁功能Oracle
- 在repeater、datalist控制元件中使用分頁功能 (轉)控制元件
- 使用PagedDataSource類實現DataList和Repeater控制元件的分頁顯示 (轉)控制元件
- ASP.NET中利用Repeater實現增刪改操作ASP.NET
- 分頁功能的實現
- 使用 jQuery 實現分頁功能jQuery
- web 實現分頁列印功能Web
- asp.net mvc簡單實現基於Razor的分頁控制元件ASP.NETMVC控制元件
- ASP.NET Web Forms – Repeater 控制元件簡介ASP.NETWebORM控制元件
- asp.net自制分頁頁碼條控制元件ASP.NET控制元件
- Repeater 的分頁 (摘自網路)
- DjangoRestFramework 實現分頁功能與搜尋功能DjangoRESTFramework
- 文章內容分頁功能實現
- jsp分頁功能的實現JS
- DataGridView分頁功能的實現View
- [SQL Server]分頁功能的實現SQLServer
- Repeater控制元件實現編輯、更新、刪除操作控制元件
- Flutter 分頁功能表格控制元件Flutter控制元件
- 簡單的Repeater分頁程式碼
- asp.net DataList控制元件分頁程式碼ASP.NET控制元件
- ASP.NET中自定義DataGrid分頁設定的實現ASP.NET
- Java Web(十一) 分頁功能的實現JavaWeb
- asp.net Repeater控制元件內容上下滾動播放ASP.NET控制元件
- gridview中實現分頁View
- asp.net frameset 框架頁面伸縮功能實現ASP.NET框架
- asp.net mvc 中利用jquery datatables 實現資料分頁顯示ASP.NETMVCjQuery
- WPF DataGrid分頁功能實現程式碼
- asp.net Repeater拖拽實現排序並同步排序欄位到資料庫中ASP.NET排序資料庫
- asp.net中Repeater中巢狀Repeater來顯示跟外層Repeater資料相關的其他資訊ASP.NET巢狀
- 【twfx118 】Asp.net分頁控制元件ASP.NET控制元件
- asp.net分頁控制元件AspNetPager的使用,使用傳統分頁和儲存過程分頁ASP.NET控制元件儲存過程
- Vue + Element UI + Lumen 實現通用表格功能 - 分頁VueUI
- Vue + element.ui table 分頁功能+搜尋功能的實現VueUI
- ASP.Net頁面瀏覽器“後退”功能的實現ASP.NET瀏覽器
- asp.net 內容頁訪問母版頁中的控制元件ASP.NET控制元件
- 在Asp.Net中實現類似DWR的功能ASP.NET
- Repeater中巢狀使用Repeater巢狀