データベースから取り込まれた DataGridView があります。DGV からデータベースに変更を保存するボタンがありますが、これは正常に機能します。しかし、DGV で何かが変更された場合に、データベースが自動的に更新されるようにしたいと考えました。
CellEndEdit、CellLeave、CellValidated、CellValueChanged、SelectionChanged など、いくつかのイベントを試しました。セルの内容を編集してEnterキーを押すか、その上または下のセルをクリック/選択すると正常に機能し、変更はデータベースに保存されましたが、タブを押すか、同じ行の隣のセルをクリック/選択すると、変更は保存されませんでした。上記のイベントはどれも、この問題の解決に役立ちませんでした。
//編集
サンプルコード:
このようにDGVを埋めます
query_em = "select * from Table;";
try
{
dt_em = new DataTable();
da_em = new OleDbDataAdapter(query_em, connString);
cb_em = new OleDbCommandBuilder(da_em);
bs_em = new BindingSource();
da_em.Fill(dt_em);
bs_em.DataSource = dt_em;
dgv_em.DataSource = bs_em;
dgv_em.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
通常、ボタンで更新します
private void bt_save_em_Click(object sender, EventArgs e)
{
try
{
da_em.Update(dt_em);
MessageBox.Show("Database updated.");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
}
しかし、このようなものが適切に機能するようにしたいのですが、そうではありません。正確な問題は上記で説明されています。
private void dgv_em_SelectionChanged(object sender, EventArgs e)
{
da_em.Update(dt_em);
}