- 締切済み
dataGridViewの値取得遅延について
vc++でdataGridViewの第1列にcheckBoxを設け、チェックの有無を取得しようとしています。 コードは、 for(int i = 0; i < totalLineNumber; i++){ Debug::Print("{0}", dataGridView1->Rows[i]->Cells[0]->Value->ToString()); } です。 ところが、チェックを変更しながら繰り返し実行すると、最後の変更が反映さずに、1アクション前の状態が帰ってきてしまいます。例えば、上から順に1つずつチェックを増やして、そのたびに実行すると、上から4行にチェックを入れた段階では、上から3行がTrueを返し、4行目以降がFalseを返すといった具合です。現在のチェックの状態を遅れなしに取得するには、どうすれば良いのでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wr5
- ベストアンサー率53% (2173/4061)
>Form1_DragDrop()の中で実行しています。 であれば……「チェックボックスをクリックする」=>「チェックボックスの状態が変化する」=>「変化した状態を描画する」の一連の処理は終わっているハズなので…現在の状態が取得できているはずだと思われますが…。 # 私が試した「ボタンを押して現在の状態を取得」と同じようなモノでしょう。 # ファイルのドロップでそのDataGridViewの内容を変更していなければ…ですが。 >実は、もう一つ不可解なことがありました。それは、実行中にある列にチェックをいれると、別の列のチェックが消えたり、また、ある列のチェックを外すと別の列にチェックが現れたりする現象です。 DataGridViewに対して何かしら操作を行っているところがあるのではないでしょうか? DataSourceにバインドしている場合はそちらのデータを操作した場合でも反映された…ような。 # C#でしたけどね。 C++/CLIでポインタとか使えるのか不明ですが、ふつ~のC/C++だとポインタの扱い間違えると不可解な挙動することはありますね。
- Wr5
- ベストアンサー率53% (2173/4061)
C++/CLIは触っていないので細かいところは不明ですが…。 掲示されたコードはどこで実行しているのでしょうか? C#でフォームにDataGridViewとButtonを追加して、 Buttonのイベントハンドラで実行した場合は普通に表示されましたが…。 DataGridViewのCellContentClickイベントハンドラでは変更前のもの…でしたね。 まぁ、MSDNにそう記載されていたりしますが。 # http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview.cellcontentclick%28v=vs.100%29.aspx の解説に。 CellClickでも同様。 # http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview.cellclick%28v=vs.100%29.aspx の解説に。
お礼
有難うございます。 掲載したコードは、 Form1_DragDrop()の中で実行しています。 ドラッグ&ドロップしたファイルに対して、dataGridViewで指定した処理をするのが目的です。dataGridViewの2列目には処理メニューを列挙してあります。 実は、もう一つ不可解なことがありました。それは、実行中にある列にチェックをいれると、別の列のチェックが消えたり、また、ある列のチェックを外すと別の列にチェックが現れたりする現象です。これは、一時的に起こって、その後再現していません。なにか、プログラムに不安定な要因があるのでしょうか?
お礼
有難うございます。 全く不可解な状態です。 仕方がないので、プロジェクトを立て直して、同じ状態が再現するかどうか試してみようと思っています。次にプログラムに触れるのが月曜日なので、また何かお分かりの点がありましたら、ご教示ください。
補足
質問者のsoftwarelearnerです。 次の点が明らかになりました。 (1)プロジェクトを1から作り直しても同じ結果となりました。 (2)ドラッグ&ドロップからではなく、ボタン等から呼び出せば正しい結果が得られました。 (3)ドラッグ&ドロップからボタンのメソッドを呼び出してもうまくいきませんでした。 (4)ドラッグ&ドロップとボタンの違いは不明です。 とりあえず、ボタンから起動することにします。 いろいろと有難うございました。