- PR -

データグリッドビューのチェックボックスについて

1
投稿者投稿内容
ヤマッコ
常連さん
会議室デビュー日: 2006/06/21
投稿数: 31
投稿日時: 2006-07-06 17:13
お世話になります。

環境:VS2005、VB.NET、SQLServer

画面に、データグリッドビューがあります。
そこには、チェックボックスの列があり、チェックボックスが1つ選択されている
場合のみ、その行のデータを取得するプログラムを作成しています。
そして、画面の下にファンクションキーのボタンがあります。
F8を押したときと、ボタン(選択)を押した時は、同じ処理が流れます。

問題点は、シフトボタンでデータグリッドのチェックボックスを押して
F8を押したら、なぜかデータが選択されていない旨のメッセージが表示されます。
セルを移動して、F8を押したら正しく選択されます。

F8を押す前に、データグリッドビューの再描画をしたのですが、
上手くうごきませんでした。

どなたかご存知の方は、お教えお願いいたします。
深山
ベテラン
会議室デビュー日: 2006/05/09
投稿数: 66
お住まい・勤務地: 都内某所
投稿日時: 2006-07-06 17:20
お世話になります。

データグリッドビューの再描画をするよりは、セルを移動またはフォーカスを移動させたほうが早くないですか?
#セルを移動できない理由があるのでしょうか?

[ メッセージ編集済み 編集者: 深山 編集日時 2006-07-06 17:24 ]
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-07-06 17:31
こんにちは。

選択されているか否かの判断は Cell.Value プロパティで行っていたりしませんか?
DataGridView のチェックボックスは、クリックした時点では Value プロパティの内容は変
更されず、フォーカスが移動した時点で [編集状態が完了] になるので、そのタイミング
で Value プロパティが変更されます。

F8 を押した時点(セルを移動する前)では編集状態にあるとみなされていますので、
Value プロパティはチェック前の値を取得します。チェック無し→チェック有りにした場合は
チェック無しを返します。
この場合は EditedFormattedValue プロパティを使用してみてください。
あるいは強制的に DataGridView.EndEdit() を呼び出すのもアリかもしれません。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-06 17:41
引用:

ヤマッコさんの書き込み (2006-07-06 17:13) より:

F8を押したら、なぜかデータが選択されていない旨のメッセージが表示されます。
セルを移動して、F8を押したら正しく選択されます。


なぜかというと、後半に書かれたとおり、セルを移動したタイミングでコミットされるからです。

引用:

F8を押す前に、データグリッドビューの再描画をしたのですが、上手くうごきませんでした。


内部的な値の話ですから、再描画は一切関係ありません。

引用:

どなたかご存知の方は、お教えお願いいたします。


F8 が押下されたタイミングで、IsCurrentCellDirty プロパティが true かどうか判断し、
true であれば、CommitEdit メソッドを呼び出してみてはいかがでしょう?

# EndEdit メソッドですと、編集状態が終了してしまいますよね。(多分)
# それと、DataGridView を使ったことがないので、見当違いでしたらすみません... orz

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ヤマッコ
常連さん
会議室デビュー日: 2006/06/21
投稿数: 31
投稿日時: 2006-07-06 17:58
深山さん
ぽぴ王子さん
じゃんぬねっとさん

様々な対象方法を教えて下さりありがとうございました。
問題なく動く事ができましたし、それ以上に凄い勉強になりました。

また、問題があった際はよろしくお願いします。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-07-06 19:39
引用:

ヤマッコさんの書き込み (2006-07-06 17:58) より:
深山さん
ぽぴ王子さん
じゃんぬねっとさん

様々な対象方法を教えて下さりありがとうございました。
問題なく動く事ができましたし、それ以上に凄い勉強になりました。

また、問題があった際はよろしくお願いします。



一体全体どなたさんの案を使ったんすか?
ってのを書かないと君にしか意味がないスレッドになっちゃうんじゃないの?
1

スキルアップ/キャリアアップ(JOB@IT)