如何使用PagedDataSource來做DataRepeater的分頁的效果

[复制链接]
查看11 | 回复0 | 2009-1-30 06:28:38 | 显示全部楼层 |阅读模式
ASP.NET中的DataList和DataRepeater提供了簡單快速的方法來展現資料,其<ItemTemplate>更是讓我們能隨心所欲的決定資料的排放方式.可惜的是他們不像Datagrid那樣,有內建的分頁功能.如何解決這個不能分頁的問題呢?在這篇文章中將會介紹如何使用 PagedDataSource Class 來解決分頁的問題.簡單的介紹幾個常用到的 PagedDataSource Class Public PropertiesDataSource - 資料來源AllowPaging - true 允許分頁;false 不允許.PageSize - 決定重複多少次PageCount - 總共有幾頁CurrentPageIndex - 目前所在的頁數IsFirstPage - 是第一頁嗎,回傳True or FalseIsLastPage - 是最後一頁嗎,回傳True or False下面就是範例(剪貼就可以直接跑了) --------------------------------------------------------------------------------<%@ Page Language="VB" %><%@ import Namespace="System.Data" %><script runat="server"> Sub Page_Load(Sender As Object, E As EventArgs)Dim Pgds As PagedDataSource = New PagedDataSource()Pgds.DataSource = CreateDataSource().DefaultView Pgds.AllowPaging = TruePgds.PageSize = 6 \'決定重複多少次lblTotalPage.text = Pgds.PageCount.ToString()Dim CurrentPage As IntegerIf Not Request.QueryString("Page") Is Nothing ThenCurrentPage=Convert.ToInt32(Request.QueryString("Page"))ElseCurrentPage=1End IfPgds.CurrentPageIndex = CurrentPage-1lblCurrentPage.Text = "Page: " + CurrentPage.ToString()If Not Pgds.IsFirstPage ThenlnkPrev.NavigateUrl=Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurrentPage-1)End IfIf Not Pgds.IsLastPage ThenlnkNext.NavigateUrl=Request.CurrentExecutionFilePath+ "?Page=" + Convert.ToString(CurrentPage+1)End IfRepeater1.DataSource=PgdsRepeater1.DataBind()End SubFunction CreateDataSource() As Datatable\'This part is an example from Asp.net QuickStart\'You can change this part with your own Dataset Dim dt As DataTableDim dr As DataRowDim i As Integer\'create a DataTabledt = New DataTabledt.Columns.Add(New DataColumn("IntegerValue", GetType(Integer)))dt.Columns.Add(New DataColumn("StringValue", GetType(String)))dt.Columns.Add(New DataColumn("DateTimeValue", GetType(DateTime)))dt.Columns.Add(New DataColumn("BoolValue", GetType(Boolean)))\'Make some rows and put some sample data inFor i = 0 To 50dr = dt.NewRow()dr(0) = idr(1) = "Item " + i.ToString()dr(2) = DateTime.Now.ToShortTimeStringIf (i Mod 2 <> 0) Thendr(3) = TrueElsedr(3) = FalseEnd If\'add the row to the datatabledt.Rows.Add(dr)NextReturn dtEnd Function</script><html><head><title>DataRepeater Paging Example</title><style type=text/css>BODY {FONT: 10px Verdana, Arial, Helvetica, "sans serif"; COLOR: #000000; }.txt {FONT-SIZE: 12px}</style></head><body><form name=form1 method=post runat="server"><table class=txt width="100%" border=0><tbody><tr><td><asp:HyperLink id=lnkPrev runat="server"><< Prev</asp:HyperLink><asp:HyperLink id=lnkNext runat="server">Next >></asp:HyperLink><asp:Label id=lblCurrentPage runat="server"></asp:Label> of <asp:Label id=lblTotalPage runat="server"></asp:Label></td></tr></tbody></table><asp:repeater id=Repeater1 runat="server"><ItemTemplate><hr align="left" width="60%" size="1"><table class=txt width="100%" border="0"><tr><td>Order Date: <%# DataBinder.Eval(Container.DataItem, "DateTimeValue", "{0:d}") %></td><tr><td>Quantity: <%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:N2}") %></td><tr><td>Item: <%# DataBinder.Eval(Container.DataItem, "StringValue") %></td><tr><td>Order Date: <asp:CheckBox id=chk1 Checked=\'<%# DataBinder.Eval(Container.DataItem, "BoolValue") %>\' runat="server"/></td></tr></table></ItemTemplate></asp:repeater><hr hight="1"><p>Datasource:Microsoft QuickStart Example http://cht.gotdotnet.com/quickstart/aspplus/doc/webdatabinding.aspx</p><p>Reference:MSDN .NET Framework Class Libraryhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolspageddatasourceclasstopic.asp</p><p>Paging with Repeater control in ASP.NEThttp://www.charon.co.uk/content.aspx?CategoryID=28&ArticleID=21 </p></form></body></html>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行