バインドされていないdataGridViewコントロールのセル値を検証していますが、動作が気に入らないのです。
セルに無効な値が入力された場合、そのセルから離れることはできません。問題ありません。セルから無効なデータをクリアして空白または空のままにしても、セルから離れることができず、気に入らない。セルに入力した無効なデータを元に戻すためにEscキーを押しても、その特定のセルに有効な値を入力する前に、dataGridViewの他のセルに移動することはできません。これは、たとえば単一列の値が欠落している行の入力をキャンセルできないことを意味します。
セルから離れるには、少なくとも0(ゼロ)を入力する必要がありますが、これは行いたくありません。OKと言うことができるようにしたい、このレコード全体の入力を許可するか、セルをリセットします。値を空にし、強調表示し、別のセルに移動して、後で戻ってきます。
private void dataGridViewSales_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
switch (this.dataGridViewSales.Columns[e.ColumnIndex].Name)
{
case "Qty":
{
decimal qty;
if (!decimal.TryParse(e.FormattedValue.ToString(), out qty))
{
e.Cancel = true;
this.dataGridViewSales.Rows[e.RowIndex].ErrorText = "The quantity sold must be a numeric value";
dataGridViewSales.EditingControl.BackColor = Color.Red;
}
}
break;
}
}