DatagridView検証とセル値の変更
-
13-10-2019 - |
質問
DatagridViewのセルを検証しているときにセルを操作して、ユーザーがデータベースに対して有効ではなく有効なデータに簡単に変換される値を入力した場合、プログラムは適切なデータに変更されます。
私は自分の価値を適切に検証することができますが、それを有効なものに変更しようとすると、DataErrorを取得します。これが私のコードです:
private void unit_List_2_GroupsDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
Console.WriteLine("Validating");
DataGridViewColumn col = this.unit_List_2_GroupsDataGridView.Columns[e.ColumnIndex];
DataGridViewCell cell = this.unit_List_2_GroupsDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex];
if (col == this.batchDataGridViewTextBoxColumn && this.unit_List_2_GroupsDataGridView.IsCurrentCellInEditMode)
{
Console.WriteLine(" Batch Column");
DataRow[] rows = label_EntryDataSet.viewJobBatchList.Select(String.Format("Job={0} AND Display='{1}'"
, comboBox1.SelectedValue, e.FormattedValue));
if (rows.Length == 1)
{
Console.WriteLine(" Auto Completed item from list: {0}", rows[0]["Batch"]);
//e.Cancel = true;
cell.Value = rows[0]["Batch"];
//this.unit_List_2_GroupsDataGridView.EndEdit();
}
else
{
Console.WriteLine(" No Autocomplete!");
int i = 0;
if (!int.TryParse(e.FormattedValue.ToString(), out i))
{
Console.WriteLine(" Not an integer either");
e.Cancel = true;
}
}
}
}
読む行 cell.value = rows [0] ["batch"]; 私がそれがすることを期待していることをしていません。
解決
CellValidating
イベントはいつの直前に発生します DataGridView
編集モードの葉。これは、編集コントロールに関連するイベントです(DataGridView.EditingControl
)。このイベントのハンドラーのセル値を変更しようとしないでください。イベントをキャンセルしない限り(ユーザーが編集モードでスタックされている場合)、セル値は編集制御の直後に編集コントロールから値に設定されます。イベント終了。したがって、これにより、ハンドラーで実行するアクションが元に戻されます。
代わりにあなたがしなければならないことは、編集コントロールの値を変更することです(イベントをキャンセルしないことを忘れないでください)。たとえば、a DataGridViewTextBoxCell
, 、問題のある行の代わりに、次のものを使用します。
unit_List_2_GroupsDataGridView.EditingControl.Text = Convert.ToString(rows[0]["Batch"]);
これにより問題が解決することがわかります。
所属していません StackOverflow