VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1210|回复: 7

Repeater控件的分页?

[复制链接]

3

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-3-4 00:00:02 | 显示全部楼层 |阅读模式
关于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分页?
回复

使用道具 举报

3

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-5-17 08:30:01 | 显示全部楼层
主要问题在于查询后进行分页,点击下一页Repeater就不显示数据了
回复

使用道具 举报

1

主题

9

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-5-18 08:30:02 | 显示全部楼层
使用存储过程会好点~!
回复

使用道具 举报

0

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-5-18 09:15:01 | 显示全部楼层
查询后,要重新绑定查询后的数据
回复

使用道具 举报

0

主题

20

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-5-18 11:15:02 | 显示全部楼层
如果直接改你的这个代码的话

你就直接把这些代码copy到一个新的方法中,将sql语句作为参数传进去,每次页面刷新就执行一次就可以了

多说一句,这样的代码性能很差的

回复

使用道具 举报

0

主题

20

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-5-18 16:00:01 | 显示全部楼层
帮你写写代码
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再自己改改页码的控制就可以了
回复

使用道具 举报

3

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-5-20 09:45:01 | 显示全部楼层
把上例的Page_Load部分写入到Button_Click事件中,虽然也分页了,但是点击下一页会出现Repeater中无数据,这才是问题所在
回复

使用道具 举报

2

主题

7

帖子

6.00

积分

新手上路

Rank: 1

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

使用道具 举报

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

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表