Asp.net 中继器寻呼

Asp.net 中继器寻呼,asp.net,xml,linq,Asp.net,Xml,Linq,我想在中继器控制中进行分页。我使用xml作为linq的数据库。所以,请给我一个建议,怎样才能做到这一点。 我尝试了这个代码,但它不起作用 public int RowCount { 得到 { 返回(int)视图状态[“行计数”]; } 设置 { ViewState[“行计数”]=值; } } 受保护的无效页面加载(对象发送方、事件参数e) { 如果(!IsPostBack) { 获取数据(5,0); } 其他的 { 占位符1.Controls.Clear(); CreatePagingContr

我想在中继器控制中进行分页。我使用xml作为linq的数据库。所以,请给我一个建议,怎样才能做到这一点。 我尝试了这个代码,但它不起作用

public int RowCount
{
得到
{
返回(int)视图状态[“行计数”];
}
设置
{
ViewState[“行计数”]=值;
}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
获取数据(5,0);
}
其他的
{
占位符1.Controls.Clear();
CreatePagingControl();
}
}
私有void FetchData(int take,int pagesize)
{
var doc=XDocument.Load(Server.MapPath(“~/BlogContent.xml”);
var result=doc.substands(“post”)。其中(x=>x.Element(“id”)!=null)。Take(Take)。Skip(pageSize)
.选择(x=>new
{
id=x.Element(“id”).值,
title=x.元素(“title”).值,
描述=x.元素(“描述”).值,
dt=x元素(“dt”)值,
mnt=x.元素(“mnt”)值,
yr=x元素(“yr”)值,
postdate=x.Element(“postdate”).值
}).OrderByDescending(x=>x.id);
PagedDataSource page=新的PagedDataSource();
page.allowpage=true;
page.AllowCustomPaging=true;
page.DataSource=结果;
page.PageSize=10;
如果(!IsPostBack)
{
RowCount=result.Count();
}
}
私有void CreatePagingControl()
{
对于(int i=0;i<(行数/10)+1;i++)
{
LinkButton lnk=新的LinkButton();
lnk.Click+=新事件处理程序(lbl\u Click);
lnk.ID=“lnkPage”+(i+1).ToString();
lnk.Text=(i+1).ToString();
占位符1.控件.添加(lnk);
标签间隔=新标签();
间隔符。Text=“”;
占位符1.控件。添加(间隔符);
}
}
无效lbl_单击(对象发送者,事件参数e)
{
LinkButton lnk=发送方为LinkButton;
int currentPage=int.Parse(lnk.Text);
int take=currentPage*10;
int skip=currentPage==1?0:取-10;
获取数据(获取、跳过);
}
当我使用此代码时,“上一步”和“下一步”按钮正常工作,但中继器上的数据没有变化。请查看:

void lbl\u单击(对象发送方,事件参数e)
{
LinkButton lnk=发送方为LinkButton;
int currentPage=int.Parse(lnk.Text);
int take=currentPage*10;
int skip=currentPage==1?0:取-10;
获取数据(获取、跳过);
}
您要说的是,您将在行中显示当前页面数的10倍。例如,如果您在第4页,您将显示40行,而在第5页,您将显示50行

然后你们决定要跳过多少行,所以在第一页你们将不跳过任何一行,但在第四页你们将跳过40-10=30行。您应该做的是始终获取一组预定义的行,即10,然后将skip作为变量

例如,您应该将代码设置为:

void lbl\u单击(对象发送方,事件参数e)
{
LinkButton lnk=发送方为LinkButton;
int currentPage=int.Parse(lnk.Text);
int-take=10;
int skip=(当前页-1)*10;
获取数据(获取、跳过);
}
在第1页,您将跳过0行,在第2页,您将跳过10行等

您甚至可以考虑在用户定义的变量中包含take编号

编辑

你也应该检查你的页面加载

受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
{
获取数据(5,0);
}
其他的
{
占位符1.Controls.Clear();
CreatePagingControl();
}
}
在数据的初始加载中,取前五行并跳过0。如果你改成

FetchData(10,0);
你应该没事的


Giannis

但尚未解决的问题是页面编号没有显示正确,它只显示1,中继器中的数据首次显示5篇文章,但当我单击页面链接时,它再次显示10篇文章。但是在我的xml中,我只有10个post totals,然后您可以将10更改为5,比如:FetchData(5,0),int-take=5;和int skip=(当前页-1)*5;。我建议使用一个名为RowsPerPage的变量或设置,然后用该变量替换5。然后,用户或管理员可以在不更改代码的情况下根据自己的喜好更改该值……我告诉过你,我这样做了,然后又遇到了相同的页码问题:(在FetchData sub中,您定义了page.PageSize=10;将其更改为5。很抱歉,您看到我之前关于更改PageSize属性的评论了吗?