我有一个 GridView,其中包含客户端列表及其绑定到 Sq1DataSource 的详细信息。我想通过 RowUpdating 事件从后面的代码更新它,方法是逐个单元格地访问数据并将其发送到我的客户端 BLL 中的更新函数。这是代码:
protected void gvClients_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = gvClients.Rows[e.RowIndex];
//accesses Client Id
cliIdStr = ((TextBox)(row.Cells[1].Controls[0])).Text;
int cliId = int.Parse(cliIdStr);
cliBll = new ClientBLL(conStrName);
//Accesses client object from DB according to Client Id accessed from gridView
client = cliBll.GetClient(cliId);
if (client != null)
{
client.ClientName = ((TextBox)(row.Cells[2].Controls[0])).Text;
client.Phone = ((TextBox)(row.Cells[3].Controls[0])).Text;
client.EMail = ((TextBox)(row.Cells[4].Controls[0])).Text;
client.Fax = ((TextBox)(row.Cells[5].Controls[0])).Text;
client.Address = ((TextBox)(row.Cells[6].Controls[0])).Text;
client.City = ((DropDownList)(row.Cells[7].Controls[0])).SelectedValue;
client.ZipCode = ((TextBox)(row.Cells[8].Controls[0])).Text;
client.IdNum = ((TextBox)(row.Cells[9].Controls[0])).Text;
client.BusField = ((TextBox)(row.Cells[10].Controls[0])).Text;
cliBll = new ClientBLL(conStrName);
cliBll.UpdateClient(cliDtlShrt);
}
}
当我运行程序并按下 GridView 的编辑按钮时,一切都很好,但是当我按下 Uodate 按钮时,会引发以下异常:
[ArgumentOutOfRangeException:指定的参数超出了有效值的范围。参数名称:index]
System.Web.UI.ControlCollection.get_Item(Int32 index) +8673806
指向代码中的这一行:
cliIdStr = ((TextBox)(row.Cells[1].Controls[0])).Text;
如果我正确理解该消息,则问题出在 Controls[0] 中,但为什么呢?如何从 gridView 单元格访问数据以发送到更新?