【发布时间】:2012-11-29 02:02:07
【问题描述】:
我有 2 个用 C# 4.0 编写的表单。 FormA 有一个 DataGridView,它通过一个 DataAdapter 和一个 BindingSource 连接到一个 MS SQL 数据库。网格有一个复选框。当用户勾选复选框时 FormB 被调用。 FormB 有一个“是”/“否”按钮。如果 FormB 中的 DialogResult 为“是”,则应使用复选框的新值更新数据库 - 无需用户按下 FormA 上的任何其他项目。
这是一些伪代码:
甲型:
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
DialogResult dialogRes = new FormB().ShowDialog();
if (dialogRes == DialogResult.Yes)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
dataGridView1.EndEdit();
table.EndInit();
dataAdapter.Update(table);
}
}
结果未保存到数据库中。如果我在按钮事件上放置相同的“保存/更新”功能,它就可以正常工作。所以一定是因为 CellValueChanged 事件需要完成(并且可能需要触发其他事件)才能成功提交更改!?
请帮忙,我要疯了……
编辑:使用 CellEndEdit 具有相同的效果 - 没有。 我已经设置了 SqlCommandBuilder,并且在上述情况之外的所有其他情况下,数据库正在正确更新
【问题讨论】:
-
尝试
DataGridView.CellEndEdit事件而不是CellValueChanged。
标签: c# winforms events datagridview commit