关于Repeater控件的分页,网上有很多,但都是在页面加载的时候进行分页,如下例:
 
<%@ Page Language="C#" %>
<%@ import namespace="System.Data" %>
<%@ import namespace="System.Data.OleDb" %>
<script language="C#" runat="server">
public void Page_Load(Object src,EventArgs e) {
  OleDbConnection objConn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + 
   Server.MapPath("../aspxWeb.mdb"));
  OleDbDataAdapter objCommand=new OleDbDataAdapter("select * from Document",objConn);
  DataSet ds=new DataSet();
  objCommand.Fill(ds);  PagedDataSource objPds = new PagedDataSource();
  objPds.DataSource = ds.Tables[0].DefaultView;
  objPds.AllowPaging = true;
  objPds.PageSize = 5;
  int CurPage;
  if (Request.QueryString["Page"] != null)
    CurPage=Convert.ToInt32(Request.QueryString["Page"]);
  else
    CurPage=1;  objPds.CurrentPageIndex = CurPage-1;
  lblCurrentPage.Text = "当前页:" + CurPage.ToString();  if (!objPds.IsFirstPage)
    lnkPrev.NavigateUrl=Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage-1);  if (!objPds.IsLastPage)
    lnkNext.NavigateUrl=Request.CurrentExecutionFilePath+ "?Page=" + Convert.ToString(CurPage+1);  Repeater1.DataSource=objPds;
  Repeater1.DataBind();
}
</script>
<html>
<head>
<title>Repeater控件分页的例子</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
  P,TD,DIV,SPAN {font-size:9pt}
</style>
</head>
<body>
<form name="form1" method="POST" runat="server">
<div style="padding:5px;background-color:#dedede">
<asp:label ID="lblCurrentPage" runat="server"></asp:label></td>
  <td>&nbsp;<asp:HyperLink id="lnkPrev" runat="server">上一页</asp:HyperLink>
  <asp:HyperLink id="lnkNext" runat="server">下一页</asp:HyperLink>&nbsp;
</div>
<hr size="1" color="#000099"/>
<asp:Repeater ID="Repeater1" runat="server">
<Itemtemplate>
<div style="padding:5px;background-color:#dedede">
<%# DataBinder.Eval(Container.DataItem, "Title") %>
</div>
</Itemtemplate>
</asp:Repeater>
</form>
</body>
</html>在实际应用中,都是基于某一事件(比如查询)的,如果将上例子改写为基于某一查询事件的Repeater分页?

解决方案 »

  1.   

    主要问题在于查询后进行分页,点击下一页Repeater就不显示数据了
      

  2.   

    http://dotnet.aspx.cc/article/d5c6e29d-99f5-44e8-4fed-75af892a53cb/read.aspx
      

  3.   

    如果直接改你的这个代码的话你就直接把这些代码copy到一个新的方法中,将sql语句作为参数传进去,每次页面刷新就执行一次就可以了多说一句,这样的代码性能很差的
      

  4.   

    帮你写写代码
    public void ExecuteSQL(string sql) {
      OleDbConnection objConn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + 
       Server.MapPath("../aspxWeb.mdb"));
      OleDbDataAdapter objCommand=new OleDbDataAdapter(sql ,objConn);
      DataSet ds=new DataSet();
      objCommand.Fill(ds);  PagedDataSource objPds = new PagedDataSource();
      objPds.DataSource = ds.Tables[0].DefaultView;
      objPds.AllowPaging = true;
      objPds.PageSize = 5;
      int CurPage;
      if (Request.QueryString["Page"] != null)
        CurPage=Convert.ToInt32(Request.QueryString["Page"]);
      else
        CurPage=1;  objPds.CurrentPageIndex = CurPage-1;
      lblCurrentPage.Text = "当前页:" + CurPage.ToString();  if (!objPds.IsFirstPage)
        lnkPrev.NavigateUrl=Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage-1);  if (!objPds.IsLastPage)
        lnkNext.NavigateUrl=Request.CurrentExecutionFilePath+ "?Page=" + Convert.ToString(CurPage+1);  Repeater1.DataSource=objPds;
      Repeater1.DataBind();
    }public void Page_Load(Object src,EventArgs e) 
    {
        this.ExecuteSQL("select * from Document");
    }lz再自己改改页码的控制就可以了
      

  5.   

    把上例的Page_Load部分写入到Button_Click事件中,虽然也分页了,但是点击下一页会出现Repeater中无数据,这才是问题所在
      

  6.   

    我觉得象这种只是展示数据的页面,可以利用自定义http处理程序饶过asp.net页框架处理,利用dataset生成xml内存流--进行转化为字符串流,然后利用httptextwriter的write方法写入网络流。这个时候就可以利用客户数据岛绑定table的方法实现客户端分页。再配合CSS\Javascrit的使用。当然这一切工作都是在ProcessRequest中完成的。
    ------由于数据全部在客户端ie缓存,对用户是非常友好的,同时还减轻了服务器的负担。