获取gridview第二页的行索引

时间:2015-03-04 07:21:21

标签: c# asp.net gridview

我已经使用了一个带有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,那就可以了。

2 个答案:

答案 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);
}