蓝信子 发表于 2008-12-24 11:59:51

DataList和DataRepeater分页

  ASP.NET中的DataList和DataRepeater提供了简单快速的方法來显示,其间,我们可以使用<ItemTemplate>更是使我们能随心所欲的控制数据的排放样式!.可惜的是它们不像Datagrid那样,有内置的分页功能。
  
  如何解决呢?
  
  其实我们可以【PagedDataSource】 类来解决分页的问题。
  
  PagedDataSource类的属性:
  
  DataSource -数据源
  
  AllowPaging - true 是否允许分页.
  PageSize - 每页项目数量
  PageCount - 总页数
  
  CurrentPageIndex - 当前所在的页索引
  代码如下:
  
  <%@ Page Language="VB" %>
  <%@ import Namespace="System.Data" %>
  <script runat="server">
    Sub Page_Load(ByVal Sender As Object, ByVal e As EventArgs)
  
      Dim Pgds As PagedDataSource = New PagedDataSource
      Pgds.DataSource = CreateDataSource().DefaultView
      Pgds.AllowPaging = True
      Pgds.PageSize = 6
      lblTotalPage.Text = Pgds.PageCount.ToString()
  
      Dim CurrentPage As Integer
      If Not Request.QueryString("Page") Is Nothing Then
        CurrentPage = Convert.ToInt32(Request.QueryString("Page"))
      Else
        CurrentPage = 1
      End If
  
      Pgds.CurrentPageIndex = CurrentPage - 1
      lblCurrentPage.Text = CurrentPage.ToString()
  
      If Not Pgds.IsFirstPage Then
        lnkPrev.NavigateUrl = Request.CurrentExecutionFilePath   "?Page="   Convert.ToString(CurrentPage - 1)
      End If
  
      If Not Pgds.IsLastPage Then
        lnkNext.NavigateUrl = Request.CurrentExecutionFilePath   "?Page="   Convert.ToString(CurrentPage   1)
      End If
  
      Repeater1.DataSource = Pgds
      Repeater1.DataBind()
  
    End Sub
  
  Function CreateDataSource() As Datatable
  
  Dim dt As DataTable
  Dim dr As DataRow
  Dim i As Integer
  
      dt = New DataTable
      dt.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)))
  
  For i = 0 To 50
  dr = dt.NewRow()
  dr(0) = i
  dr(1) = "Item "   i.ToString()
  dr(2) = DateTime.Now.ToShortTimeString
  If (i Mod 2 <> 0) Then
  dr(3) = True
  Else
  dr(3) = False
  End If
  
  dt.Rows.Add(dr)
  Next
  
  Return dt
  
  End Function
  
  </script>
  
  <html><head>
  <title>DataRepeater</title>
  <style type=text/css>
  
  BODY {
  FONT: 10px Verdana, Arial, Helvetica, "sans serif"; COLOR: #000000;
  }
  .txt {
  FONT-SIZE: 12px
  }
  </style>
  </head>
  <body>
  <form id="Form1" name=form1 method=post runat="server">
  <table class=txt width="100%" border=0>
  <tbody><tr><td>
  
  <asp:hyperlink id=lnkPrev runat="server">上页</asp:hyperlink>
   <asp:hyperlink id=lnkNext runat="server">下页</asp:hyperlink>第
  <asp:label id=lblCurrentPage runat="server"></asp:label> 页 共 <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">
  
  </form>
  
  </body>
  
  </html>
   <
页: [1]
查看完整版本: DataList和DataRepeater分页