Repeater控件的分页?

dong_2081 2007-01-05 11:18:42
关于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> <asp:HyperLink id="lnkPrev" runat="server">上一页</asp:HyperLink>
<asp:HyperLink id="lnkNext" runat="server">下一页</asp:HyperLink> 
</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分页?
...全文
611 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjjjyyyyy 2007-01-05
  • 打赏
  • 举报
回复
我觉得象这种只是展示数据的页面,可以利用自定义http处理程序饶过asp.net页框架处理,利用dataset生成xml内存流--进行转化为字符串流,然后利用httptextwriter的write方法写入网络流。这个时候就可以利用客户数据岛绑定table的方法实现客户端分页。再配合CSS\Javascrit的使用。当然这一切工作都是在ProcessRequest中完成的。
------由于数据全部在客户端ie缓存,对用户是非常友好的,同时还减轻了服务器的负担。
dong_2081 2007-01-05
  • 打赏
  • 举报
回复
把上例的Page_Load部分写入到Button_Click事件中,虽然也分页了,但是点击下一页会出现Repeater中无数据,这才是问题所在
Reeezak 2007-01-05
  • 打赏
  • 举报
回复
帮你写写代码
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再自己改改页码的控制就可以了
Reeezak 2007-01-05
  • 打赏
  • 举报
回复
如果直接改你的这个代码的话

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

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

wengnet 2007-01-05
  • 打赏
  • 举报
回复
查询后,要重新绑定查询后的数据
harryjanny 2007-01-05
  • 打赏
  • 举报
回复
使用存储过程会好点~!
孟子E章 2007-01-05
  • 打赏
  • 举报
回复
http://dotnet.aspx.cc/article/d5c6e29d-99f5-44e8-4fed-75af892a53cb/read.aspx
dong_2081 2007-01-05
  • 打赏
  • 举报
回复
主要问题在于查询后进行分页,点击下一页Repeater就不显示数据了

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧