读书人

GridView1.DataKeys[gvr.DataItemInde

发布时间: 2012-03-06 20:47:55 作者: rapoo

GridView1.DataKeys[gvr.DataItemIndex].Value.ToString()索引超出范围。必须为非负值并小于集合大小
一个非常奇怪的问题:

有一个 GridView1 ,

<asp:GridView ID= "GridView1 " runat= "server " AllowPaging= "True " DataKeyNames= "id,name ">

说明:

页面中有一个 Button1 ,然后, GridView1 的第一个模板列有一个 checkbox ,用来做选中当前行,然后,当我点击 Button1 按钮的时候,激发以下事件,取得此 GridView1 中被 选中的行的值,当我的 GridView 没有设分页的时候,以下一切正常:

protected void Button1_Click(object sender, EventArgs e)
{
this.Label1.Text = " ";

foreach (GridViewRow gvr in GridView1.Rows)
{
CheckBox ch = (CheckBox)gvr.FindControl( "ItemCheckBox ");
if (ch.Checked)
{
this.Label1.Text += " <li> GridView1 您选择的是(键值): " + GridView1.DataKeys[gvr.DataItemIndex].Value.ToString();

}
}

}


可是当我把此 GridView 设置成分页模式以后,只有在第一页,点击 Button1 按钮时,以上事件才可以正常,当翻到第 二页及以后时,以下事件,就出错了:

-------------------------------------------

索引超出范围。必须为非负值并小于集合大小。
参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index

--------------------------

然后,IIS 就报出以不这句有错:

this.Label1.Text += " <li> GridView1 您选择的是(键值): " + GridView1.DataKeys[gvr.DataItemIndex].Value.ToString();




[解决办法]
this.Label1.Text += " <li> GridView1 您选择的是(键值): " + GridView1.DataKeys[gvr.DataItemIndex].Value.ToString();
===============================================================================
this.Label1.Text += " <li> GridView1 您选择的是(键值): " + GridView1.DataKeys[gvr.RowIndex].Value.ToString();

读书人网 >asp.net

热点推荐