0

我正在尝试遍历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);
    }
    ...
}

如果重要的话,文本框和下拉列表都是在行绑定上动态创建的。

TIA

4

1 回答 1

1

如果不确切知道异常发生在哪一行,就很难以同样的精度进行诊断,但可能发生的情况是您正在寻找一个没有任何控件的单元格中的控件。

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

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

于 2012-10-09T21:26:14.133 回答