我想在转发器控制中进行分页。我使用xml作为linq的数据库。所以请给我建议怎么做。 我尝试这个代码,但它无法正常工作
public int RowCount
{
get
{
return (int)ViewState["RowCount"];
}
set
{
ViewState["RowCount"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FetchData(5, 0);
}
else
{
PlaceHolder1.Controls.Clear();
CreatePagingControl();
}
}
private void FetchData(int take,int pagesize)
{
var doc = XDocument.Load(Server.MapPath("~/BlogContent.xml"));
var result = doc.Descendants("post").Where(x => x.Element("id") != null).Take(take).Skip(pageSize)
.Select(x => new
{
id = x.Element("id").Value,
title = x.Element("title").Value,
Description = x.Element("Discription").Value,
dt = x.Element("dt").Value,
mnt = x.Element("mnt").Value,
yr = x.Element("yr").Value,
postdate = x.Element("PostDate").Value
}).OrderByDescending(x => x.id);
PagedDataSource page = new PagedDataSource();
page.AllowPaging = true;
page.AllowCustomPaging = true;
page.DataSource = result;
page.PageSize = 10;
if (!IsPostBack)
{
RowCount = result.Count();
}
}
private void CreatePagingControl()
{
for (int i = 0; i < (RowCount / 10) + 1; i++)
{
LinkButton lnk = new LinkButton();
lnk.Click += new EventHandler(lbl_click);
lnk.ID = "lnkPage" + (i + 1).ToString();
lnk.Text = (i + 1).ToString();
PlaceHolder1.Controls.Add(lnk);
Label spacer = new Label();
spacer.Text = " ";
PlaceHolder1.Controls.Add(spacer);
}
}
void lbl_click(object sender, EventArgs e)
{
LinkButton lnk = sender as LinkButton;
int currentPage = int.Parse(lnk.Text);
int take = currentPage * 10;
int skip = currentPage == 1 ? 0 : take - 10;
FetchData(take, skip);
}
当我使用此代码时,前一个和下一个按钮正在工作,但转发器上的数据没有改变
答案 0 :(得分:0)
看看:
void lbl_click(object sender, EventArgs e)
{
LinkButton lnk = sender as LinkButton;
int currentPage = int.Parse(lnk.Text);
int take = currentPage * 10;
int skip = currentPage == 1 ? 0 : take - 10;
FetchData(take, skip);
}
您所说的是您将在行中显示10倍当前页面的数量。例如,如果您在第4页中,则将显示40行,而在第5页中,您将显示50行。
然后你决定要跳过多少行,所以在第一页你将跳过没有,但在第4页你会跳过40 - 10 = 30行。你应该做的是总是采用一组预定义的行,即10,然后将skip作为变量。
例如,您的代码应为:
void lbl_click(object sender, EventArgs e)
{
LinkButton lnk = sender as LinkButton;
int currentPage = int.Parse(lnk.Text);
int take = 10;
int skip = (currentPage - 1) * 10;
FetchData(take, skip);
}
在第1页中,您将跳过0行,在第2页中有10行等。
您甚至可以考虑在用户定义的变量中使用拍号...
修改强>
您还应该检查您的Page_Load
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FetchData(5, 0);
}
else
{
PlaceHolder1.Controls.Clear();
CreatePagingControl();
}
}
在初始加载数据时,您将获取前五行并跳过0.如果将其更改为
FetchData(10, 0);
你应该没事。
Giannis