C# 4.0 で記述された 2 つのフォームがあります。FormA には、DataAdapter と BindingSource を使用して MS SQL データベースに接続された DataGridView があります。グリッドにはチェックボックスがあります。ユーザーがチェックボックスをオンにすると、FormB が呼び出されます。FormB には「はい」/「いいえ」ボタンがあります。FormB からの DialogResult が「はい」の場合、ユーザーが FormA で追加の項目を押すことなく、データベースをチェックボックスの新しい値で更新する必要があります。
ここにいくつかの疑似コードがあります:
フォームA:
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 をセットアップしました。データベースは、上記以外のすべての状況で正しく更新されています。