我写了像
这样的代码 protected void lnkprev_Click(object sender, EventArgs e)
{
List<ListItem> pages = new List<ListItem>();
int pagecount = Convert.ToInt32(Session["pagecount"].ToString());
int lastnumber = Convert.ToInt32(Session["lastnumber"].ToString());
int prevtennumber = lastnumber - 10;
for (int i=prevtennumber ; i <= pagecount; i++)
{
if (i < prevtennumber)
{
pages.Add(new ListItem(i.ToString(), i.ToString(), i != PageIndex));
if (i == 1)
{
lnkprev.Visible = false;
}
}
Session["lastnumber"] = prevtennumber;
Session["pagecount"] = pagecount;
rptPager.DataSource = pages;
rptPager.DataBind();
}
}
protected void lnknext_Click(object sender, EventArgs e)
{
List<ListItem> pages = new List<ListItem>();
int pagecount = Convert.ToInt32(Session["pagecount"].ToString());
int lastnumber = Convert.ToInt32(Session["lastnumber"].ToString());
int nexttennumber = lastnumber + 10;
for (int i = lastnumber; i <= pagecount; i++)
{
if (i < nexttennumber)
{
pages.Add(new ListItem(i.ToString(), i.ToString(), i != PageIndex));
if (i == pagecount)
{
lnknext.Visible = false;
}
}
Session["lastnumber"] = nexttennumber;
Session["pagecount"] = pagecount;
rptPager.DataSource = pages;
rptPager.DataBind();
}
}
我正在使用页码填充转发器,该页码用于网格视图中的分页。实际上我必须首先显示前十个数字。当用户点击下一个按钮时,页码应从10到20开始,依此类推。 现在下一个按钮工作正常。 prev按钮无法正常工作。 请帮忙!!!
答案 0 :(得分:1)
当您调试代码时,首先要做的是尝试让您的工作更轻松。
让我们快速重构你的next()
函数,看看你复制/粘贴代码时的错误,就像你在这里做的那样。请随意纠正我在这里可能做的任何写作错误,具体取决于您的观点细节。
protected void CreatePages(int startingPoint, int checkingPoint, int endPoint, Button button)
{
List<ListItem> pages = new List<ListItem>();
for (i = startingPoint; i < endPoint; i++)
{
if (i < checkingPoint)
{
pages.Add(new ListItem(i.ToString(), i.ToString(), i != PageIndex));
if (i == endPoint)
{
button.Visible = false;
}
}
}
Session["lastnumber"] = checkingPoint;
Session["pagecount"] = endPoint;
rptPager.DataSource = pages;
rptPager.DataBind();
}
protected void lnknext_Click(object sender, EventArgs e)
{
int pagecount = Convert.ToInt32(Session["pagecount"].ToString());
int lastnumber = Convert.ToInt32(Session["lastnumber"].ToString());
int nexttennumber = lastnumber + 10;
CreatePagesAndBindRepeater(lastnumber, nexttennumber, pagecount, lnknext);
}
现在,您实际为prev()
做的是:
protected void lnkprev_Click(object sender, EventArgs e)
{
int pagecount = Convert.ToInt32(Session["pagecount"].ToString());
int lastnumber = Convert.ToInt32(Session["lastnumber"].ToString());
int prevtennumber = lastnumber - 10;
CreatePagesAndBindRepeater(lastnumber, prevtennumber, pagecount, lnkprev);
}
哪个错了;你在这个功能中向前推进,不向后,使你的检查不起作用,导致你面临的所有麻烦。在这种情况下,设置迭代器的增量将允许您以工作方式执行这两种行为(RaphaëlAlthaus指出主要缺陷)
在任何情况下,使用会话来记录导航数据都很麻烦,原因很多(Coockie在导航期间被删除,超时,在服务器中强制进行状态跟踪......)
您应该使用请求数据,并根据您获得的每个请求相应地绑定转发器。
答案 1 :(得分:0)
除了其他评论之外(我认为还有代码重写工作)
for (int i=prevtennumber ; i <= pagecount; i++)
{
//this will never be reached, as you start with i = prevtennumber
if (i < prevtennumber)
所以我至少会说(或者除了prevtennumber以外的任何逻辑上的东西)
if (i < lastnumber)