请解释一下发生了什么。我创建了一个 WinForms .NET 应用程序,该应用程序在表单上有 DataGridView,并且在使用 DataGridView 内联编辑时应该更新数据库。
表单有SqlDataAdapter _da 和四个 SqlCommands 绑定到它。DataGridView 直接绑定到 DataTable _names。
这样的 CellValueChanged 处理程序:
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
_da.Update(_names);
}
尽管 _names DataTable 已更新,但不会更新数据库状态。_names 的所有行都有 RowState == DataRowState.Unchanged
好的,我修改了处理程序:
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
DataRow row = _names.Rows[e.RowIndex];
row.BeginEdit();
row.EndEdit();
_da.Update(_names);
}
此变体确实将修改后的单元格写入数据库,但是当我尝试将新行插入网格时,我收到一个错误,提示缺少索引为 e.RowIndex 的行
所以,我决定进一步改进处理程序:
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (_names.Rows.Count<e.RowIndex)
{
DataRow row = _names.Rows[e.RowIndex];
row.BeginEdit();
row.EndEdit();
}
else
{
DataRow row = _names.NewRow();
row["NameText"] = dataGridView1["NameText", e.RowIndex].Value;
_names.Rows.Add(row);
}
_da.Update(_names);
}
现在,当我向网格插入新行时,真正奇怪的事情发生了:网格保持原样,直到 _names.Rows.Add(row); 在此行之后,将三行插入到表中 - 两行具有相同的值,另一行具有 Null 值。
稍作修改的代码:
DataRow row = _names.NewRow();
row["NameText"] = "--------------"
_names.Rows.Add(row);
插入具有三个不同值的三行:一个输入到网格中,第二个具有“--------------”值,第三个 - 具有 Null 值。
我真的被困在猜测发生了什么。