首页 新闻 会员 周边

asp.net GridView分页

0
悬赏园豆:15 [已解决问题] 解决于 2010-10-12 09:46

用GridView进行分页时,分页大小为6,第一页有6行,第二页只有一行,

这样的话,当点击第二页回到第一页时,出现如下错误!

索引超出范围。必须为非负值并小于集合大小。 参数名: index

行 55: {

行 56: int index = Convert.ToInt32(e.CommandArgument);

行 57: GridViewRow row = gdv.Rows[index];

行 58: int userID = Convert.ToInt32(row.Cells[0].Text.ToString());

行 59: if (e.CommandName == "upgrade")

后台代码:

protected void GridView_PageIndexChanging(object sender,

GridViewPageEventArgs e)

{

gdv.PageIndex = e.NewPageIndex;

DataTable dt = BLL.Upgrade.select();

this.gdv.DataSource = dt;

this.gdv.DataBind(); //重新绑定GridView数据

}

如何才能解决,实现没有错误!

笑翱江湖的主页 笑翱江湖 | 初学一级 | 园豆:126
提问于:2010-10-09 14:45
< >
分享
最佳答案
0

 你出错的根本不是翻页代码,你贴的后台源码没有什么用。

是你的index超出范围,我的理解e.CommandArgument的值翻页后有变化,你调试跟踪一下不就ok了。

另外e.CommandArgument的值你是想用来取每行的userID吧。这段代码你要放在page_load中才行,不能放在isPostBack里面。否则index不会刷新。你看似翻页没问题,其实第一页到第二页已经不对了,不信你可以用8条记录试试,只是你正好第二页只有一条不会错,返回时才出现而已。

收获园豆:12
茂茂 | 老鸟四级 |园豆:2892 | 2010-10-09 15:43
其实是我犯了个小错误, 行 59: if (e.CommandName == "upgrade") { 行 56: int index = Convert.ToInt32(e.CommandArgument); 行 57: GridViewRow row = gdv.Rows[index]; 行 58: int userID = Convert.ToInt32(row.Cells[0].Text.ToString()); 这样写就对了!
笑翱江湖 | 园豆:126 (初学一级) | 2010-10-12 09:47
其他回答(1)
0

GridView_PageIndexChanging中的代码是没有错的,是不是你的其他的地方有错误啊!还是GridView属性设置的问题啊!可以按照一楼的提议试试啊!

收获园豆:3
王祖康 | 园豆:505 (小虾三级) | 2010-10-11 23:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册