我试图遍历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
答案 0 :(得分:1)
如果不确切地知道异常被抛出到哪一行,就很难以相同的精度进行诊断,但可能发生的是你正在寻找一个没有任何控制的单元格中的控件。
怎么会这样呢?好吧,既然你是在RowDataBound
中创建控件,如果你没有在每次回发时绑定你的网格(我不建议你这样做),你的动态添加的控件将不会在回发时重新创建。发布的数据将包含这些控件的值,ViewState将包含这些控件的数据,但如果您不在每次回发时重新创建这些控件,那么当您尝试访问它们的值时,这些控件将不存在。
但是您不必重新绑定来重新创建控件。正如Schmelter先生在评论中所说,如果将控件的创建从RowDataBound
移动到RowCreated
事件处理程序,则会在回发时重新创建网格行时创建它们。