请帮我解释一下正在发生的事情。我创建了一个WinForms .NET应用程序,该应用程序在表单上具有DataGridView,并且应该在使用DataGridView内联编辑时更新数据库。
表单具有绑定到其上的四个SqlCommand的SqlDataAdapter _da。DataGridView直接绑定到DataTable _names。
以下是CellValueChanged处理程序:
表单具有绑定到其上的四个SqlCommand的SqlDataAdapter _da。DataGridView直接绑定到DataTable _names。
以下是CellValueChanged处理程序:
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
_da.Update(_names);
}
虽然_names DataTable已更新,但它不会更新数据库状态。所有行的 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值。
我真的被猜测发生了什么事情所困扰。