我已经使用了一个带有pagesize=10
的分页的GridView,但当我转到第二页&选择它的第一行然后它显示索引为11尽管为0所以请告诉我如何解决它。
这是我到目前为止所尝试的内容:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
BindGrid();
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
int index = (Convert.ToInt32(e.CommandArgument));
GridViewRow row = GridView1.Rows[index];
//Some operation
}
当我尝试第11行时,它会抛出错误:
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
如果我手动将值传递给index=0
,那就可以了。
答案 0 :(得分:6)
假设您的数据返回100个结果。因此,您的DataItemIndex
将从0到99分配一个唯一的CommandArgument
。
现在,如果您为PageSize = 10
设置了gridview
,则一次只能显示10行。
现在假设您转到第3页并点击第3条记录DataItemIndex
将是22,而GridView
有10行可见,因此索引超出范围。
int rowindex = Convert.ToInt32(e.CommandArgument) % GridView1.PageSize;
GridViewRow row = GridView1.Rows[rowindex];
答案 1 :(得分:1)
// Convierte el numero almacenado en CommandArgument a int para sacar el index
// Converts the number stored in CommandArgument to int to remove the index
int index = Convert.ToInt32(e.CommandArgument);
// Convierte el PageIndex del GridView a int
// Convert the PageIndex of the GridView to int
int pageIndex = Convert.ToInt32(gv_Comentarios.PageIndex);
// Convierte al index en la verdadera posicion del dataset
// It becomes the true position of the dataset to the index
if (pageIndex > 0)
{
index = index + (pageIndex * 10);
}