Top > プログラミング > .NET Tips> DataGridViewのセルに入力された値が正しいか確かめる

DataGridViewのセルに入力された値が正しいか確かめる」への評価、コメント

評価

良い / 悪い = 24 / 2 (「良い」の割合 = 0.923 , 人気度 = 1.306

評価する

コメント一覧


通常のコメント
なかむら としあき 2022/02/16 (Wed) 15:13:30
 SQLServerを使用して、Access 2010 ADPで作成した膨大な会社事務用のアプリケーションをVisual Studio 2022バージョンのDataGridViewへの全面組み換えをやっと決意して奮闘中です。
 知識・ノウハウの習得は、もっぱらWeb検索に頼っていますが、当方が必要とする情報がなかなか得られず、毎日、試行錯誤を繰り返していました。
 これまで、私が探し求めていたのは正に貴方様のこの記事です。簡潔・明瞭・丁寧で的を得て、大変分かりやすく感激しています。これからも活用させていただきますので、よろしくお願いいたします。 取り急ぎお礼申し上げます。2022/2/16

通常のコメント
万年初歩 2021/01/18 (Mon) 11:58:24
なんてことは無かったです。
本サイトの
https://dobon.net/vb/dotnet/datagridview/readonly.html
で解決しました。
恐れ入ります。ありがとうございました。

通常のコメント
万年初歩 2021/01/18 (Mon) 11:00:51
またつまづいてしまいました。(C#)
e.Cancel = true;
についてです。

誤った入力をし、カーソルキーを右に移動させた場合コミットをキャンセルします。
しかし誤った入力をしEnterキーを入れると引き続きRowEnterのイベントが発生してしまいました。
しかしRowEnter内ではe.RowIndexは増加されていません。入力セルのRowIndexのままです。

dataGridView1_RowEnter内ではセルのReadOnlyをColumnごとに設定しています。
dgv.Columns["Column"].ReadOnly = true;
が実行されると
「現在のセルをコミットできないので、操作を完了できません。」
とエラーになります。

対策としてEnter入力後のRowEnterを回避するのはよくない気がしてます。
dgv.Columns["Column"].ReadOnly = true;はCellEnterに移したほうがいいのか?、または違う方法がいいのかご意見伺いたく投稿させていただきました。
宜しくお願いします。

評価の理由
万年初歩 2020/12/3 (Thu) 10:06:45
評価:良い
凡例のコードが実用的で良いヒントになる。

通常のコメント
万年初歩 2020/09/23 (Wed) 12:02:05
ありがとうございます。
以下のコードで解決しました。

private void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
DataGridView dgv = (DataGridView)sender;

//数量
if (dgv.Columns[e.ColumnIndex].Name == "quantity" && (e.Value == DBNull.Value || e.Value.ToString().Trim() == string.Empty))
{
e.Value = 0m;
e.ParsingApplied = true;
}
}

通常のコメント
匿名 2020/09/23 (Wed) 11:12:00
>入力値が""の場合、値を0にする場合はどうなるのでしょうか。
私も少し躓いたのですが、e.FormattedValueの値はObject型のため、テキストボックスと異なり、型変換エラーが起こりやすいです。
まずisDbNullで0に置き換え、それ以外の場合でも""の場合も0に置き換える、とすると良いと思います。

通常のコメント
万年初歩 2020/09/8 (Tue) 15:14:35
すみません。
入力値が""の場合、値を0にする場合はどうなるのでしょうか。

テキストボックスのVlidatingのようにはいかないようです。

通常のコメント
管理人 2015/03/11 (Wed) 00:19:14
> 編集中のセルにエラー表示する方法ですが、まずEditingControlShowingイベントでDataGridViewTextBoxEditingControl(以降、TB)を捕捉しておいて、エラー表示時には、TBの幅を22ピクセルほど縮めた上で、独自のErrorProviderを使ってTBに対してエラー表示させるというのはだめですかね?

編集中のセルにエラーアイコンを表示する方法のリンクが切れていますね。このリンク先にあった方法は、

https://social.msdn.microsoft.com/Forums/en-US/28d812bb-5f33-46d6-94dd-6a2d1f442a29/displaying-errortext-on-the-current-cell-in-datagridview-control?forum=vblanguage

にある方法と同じと思われます。時間がある時に、リンクを修正し、私もいろいろ試してみたいと思います。ご提案、ありがとうございました。

通常のコメント
匿名 2015/03/10 (Tue) 01:03:56
編集中のセルにエラー表示する方法ですが、まずEditingControlShowingイベントでDataGridViewTextBoxEditingControl(以降、TB)を捕捉しておいて、エラー表示時には、TBの幅を22ピクセルほど縮めた上で、独自のErrorProviderを使ってTBに対してエラー表示させるというのはだめですかね?(TBの編集領域幅が少し狭くなりますが、余白がある場合は簡単でよいと思うのですが)

通常のコメント
管理人 2011/04/26 (Tue) 01:56:39
> //dgv.CancelEdit();
>
> これは、DataGridView1.CancelEdit()では?

DataGridView1でも大丈夫だと思いますが(C#のコードでは駄目なケースも考えられます)、dgvで問題ないはずです。

通常のコメント
cthirase 2011/04/25 (Mon) 11:36:34
//入力した値をキャンセルして元に戻すには、次のようにする
//dgv.CancelEdit();

これは、DataGridView1.CancelEdit()では?

コメントの投稿

[説明]