ASP.Net获取值ArgumentOutOfRangeException抛出

时间:2012-10-09 21:01:42

标签: asp.net gridview

我试图遍历gridview并立即保存其中的所有项目。但是我从下拉列表和文本框中获取值时遇到问题。我每次都会收到此错误:

ArgumentOutOfRangeException was caught. Specified argument was out of the range of valid values.

以下是我使用的代码:

foreach (GridViewRow gvr in gvInvalidOrgs.Rows)
{
   try
    {
     org_code = Convert.ToInt32(gvr.Cells[0].Text);
     division = ((DropDownList)gvr.Cells[1].Controls[0]).SelectedValue;
     org_description = (((TextBox)gvr.Cells[2].Controls[0]).Text);
    }
    ...
}

如果重要的话,文本框和下拉列表都会在rowbound上动态创建。

TIA

1 个答案:

答案 0 :(得分:1)

如果不确切地知道异常被抛出到哪一行,就很难以相同的精度进行诊断,但可能发生的是你正在寻找一个没有任何控制的单元格中的控件。

怎么会这样呢?好吧,既然你是在RowDataBound中创建控件,如果你没有在每次回发时绑定你的网格(我不建议你这样做),你的动态添加的控件将不会在回发时重新创建。发布的数据将包含这些控件的值,ViewState将包含这些控件的数据,但如果您不在每次回发时重新创建这些控件,那么当您尝试访问它们的值时,这些控件将不存在。

但是您不必重新绑定来重新创建控件。正如Schmelter先生在评论中所说,如果将控件的创建从RowDataBound移动到RowCreated事件处理程序,则会在回发时重新创建网格行时创建它们。