トップ回答者
データグリッドビューのCellValidatingについて

質問
-
データグリッドビューのセルに""が入力されたい場合、置換えて'0'を入力させたいのですが。
以下のコードではだめそうです。良い方法をご教授くださいませ。
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
//数量
if (dgv.Columns[e.ColumnIndex].Name == "quantity" && e.FormattedValue.ToString().Trim() == string.Empty)
{
//検討中(エラー発生)
dgv["quantity", e.ColumnIndex].Value = 0m;
}
}
テキストボックスのvalidatingのようにできるかと思いできませんでした。
CellValidatingでなくCellvalidatedでやるしかないでしょうか。
宜しくお願いします。
回答
-
自己解決しました。CellParsingは初めて見ました。ありがとうございました。
private void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
//数量
if (dgv.Columns[e.ColumnIndex].Name == "contractdetailscontentquantity" && (e.Value == DBNull.Value || e.Value.ToString().Trim() == string.Empty))
{
e.Value = 0m;
e.ParsingApplied = true;
}
}- 回答としてマーク SU_Twin 2020年9月23日 2:48
すべての返信
-
自己解決しました。CellParsingは初めて見ました。ありがとうございました。
private void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
//数量
if (dgv.Columns[e.ColumnIndex].Name == "contractdetailscontentquantity" && (e.Value == DBNull.Value || e.Value.ToString().Trim() == string.Empty))
{
e.Value = 0m;
e.ParsingApplied = true;
}
}- 回答としてマーク SU_Twin 2020年9月23日 2:48
-
CellValidating イベントは、e.FormattedValue で「表示用の書式指定済みの値」を受け取って検査するものであり、実データを直接操作するタイミングとは、少しズレが生じそうです。
- dobon.net - DataGridViewのセルに入力された値が正しいか確かめる
それよりも前……入力値が DataGridView に渡される前の、編集コントロール (IDataGridViewEditingControl) の段階で判定してみては如何でしょうか。編集コントロールが Leave された時点で文字列が空なら、実値を Decimal.Zero に置き換えるということです。
- dobon.net - DataGridViewでセルの編集に使われているテキストボックスを取得する
- dobon.net - DataGridViewでセルの編集に使われているその他のコントロールのイベントを捕捉する