- 締切済み
DataGridViewで再表示すると変更不可にならない
Visual Basic 2008 にて開発していますがDataGridViewについて質問させて下さい。 DataGridViewのデータ表示は、検索結果をDataTableに格納し、 そのDataTableをDataSourceに設定する方法で行っています。 DataGridView内にはチェックボックスがあり、 そのチェックボックスは条件によってReadOnly = Trueにて変更不可にして表示しています。 最初の表示は問題なく条件に合えば ReadOnly = Trueにて変更不可になり表示してくれますが、 再表示(DataTableをDataSourceに再代入)すると条件に合っているのにReadOnly = Trueが効かず、 チェックボックスが変更可能となって表示してしまいます。 ReadOnly=True にする方法は、DataGridView の件数を取得し、 jjCnt = 0 Do Until jjCnt >= ggCnt If DataGridView1.Rows(jjCnt).Cells(88).Value.ToString() = "1" Then DataGridView1.Rows(jjCnt).Cells(0).ReadOnly = True End If jjCnt = jjCnt + 1 Loop で行っています。 何故、再表示だと変更不可にならないのか解らずご教授願いたく宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- oboroxx
- ベストアンサー率40% (317/792)
For Each ... Next文を使う事をお勧めします。
- oboroxx
- ベストアンサー率40% (317/792)
他のサイトで指摘されている通り、DataBindingCompleteイベントで質問文のReadOnlyプロパティを設定すると動作します。 dataGridView1を選択して、プロパティウィンドウの雷アイコンをクリックして、DataBindingCompleteをダブルクリックし、移動したメソッドにReadOnlyプロパティの設定処理を書き込めばよいです。 では。
- oboroxx
- ベストアンサー率40% (317/792)
再描画のメソッドにおいて、 DataGridView1.DataSource = dataTable と再度代入しなおすと、一旦DataGridView1の元のチェックボックスの値は破棄されていると思われますので、 この後にもう一度、質問文のコード DataGridView1.Rows(jjCnt).Cells(0).ReadOnly = True を再実行しないといけないと思われます。 そのような処理になっていますでしょうか?
補足
はい。 再代入後も、ReadOnly = True は行っております。 尚且つ、最初の表示と、再描画の表示は、同じメソッドを通り、 同じ事を行う様にしております。
- oboroxx
- ベストアンサー率40% (317/792)
上記のReadOnlyプロパティは、再表示する時はDataSourceに再代入した後に再度Trueに設定していますでしょうか? もう少し情報がほしいです。
補足
ご返答有難う御座います。 又、返事が遅れて申し訳ありません。 再度Trueに設定とは dataGridView1.DataSource = True を行っているか? との事でしょうか? それであればしていません。 別の物のTrueにするのでしょうか?
補足
ご指示通り DataBindingComplete 内に、 jjCnt = 0 Do Until jjCnt >= ggCnt If DataGridView1.Rows(jjCnt).Cells(88).Value.ToString() = "1" Then DataGridView1.Rows(jjCnt).Cells(0).ReadOnly = True End If jjCnt = jjCnt + 1 Loop を入れて再代入処理をしてみましたが、 【インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。 パラメータ名: index】 のエラーがきてしまいます。 お手数ですが、アドバイス願いたく、宜しくお願い致します。