問題:
情報の行をグリッドに直接追加し、データをキャッチしてDBにコミットすることで、データベースを更新しようとしています。
行を UltraGrid に挿入し、アプリケーションを閉じて再起動します... 行がコミットされることもあれば、アプリケーションを再起動すると、2 つ (非常に古いエントリ) を除くすべての新しいエントリが削除されることもあります。
ここに私のコードがあります:
新しく挿入された行への参照をキャッチします。
private void ultraGrid1_BeforeRowDeactivate(object sender, CancelEventArgs e)
{
if (!first) //Ignore this step if application has just started
{
UltraGrid g = (UltraGrid)(sender);
r = g.ActiveRow;
ultraGrid1.Rows[g.ActiveRow.Index].Cells["Is Closed"].Value = false;
}
}
キーのテストと入力
private void ultraGrid1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)(13)) //Test for ENTER key
{
if (r.Band.Index == 0)
{
MessageBox.Show(r.Cells["ID"].Text);
string Action = (string)r.Cells[1].Value;
bool isChecked = (bool)r.Cells[2].Value;
MainActionsInsert(Action, isChecked);
UpdateTables();
}
}
}
キー = Enter の場合 新しく入力された ID 値を表示します MainActionsInsert() を介して DB に追加します // 以下
private void MainActionsInsert(string Action, bool Checked)
{
OleDbCommand Command = new OleDbCommand("INSERT INTO MainActions Values (ID, Action, BoolValue)", DataBaseConnection);
//Add Parameters
Command.Parameters.AddWithValue("ID", GenerateID());
Command.Parameters.AddWithValue("Action", Action);
Command.Parameters.AddWithValue("BoolValue",Checked);
//Add Command
MainActionsAdapter.InsertCommand = Command;
//Execute Agains DataBase
Command.ExecuteNonQuery();
//Accept Changes
}
Command.ExecuteNonQuery を介して挿入コマンドを実行する
そして最後に
private void UpdateTables()
{
ultraGrid1.UpdateData();
ultraGrid2.UpdateData();
ultraGrid3.UpdateData();
//
minutesDataSet.AcceptChanges();
MainActionsAdapter.Update(minutesDataSet.MainActions);
SubActionsAdapter.Update(minutesDataSet.SubActions);
SubActionsNotesAdapter.Update(minutesDataSet.SubActionNotes);
//
MainActionsAdapter.Fill(minutesDataSet.MainActions);
SubActionsAdapter.Fill(minutesDataSet.SubActions);
SubActionsNotesAdapter.Fill(minutesDataSet.SubActionNotes);
}