- PR -

DataGrid(WinForm+VB)のCheckBox操作について

1
投稿者投稿内容
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2004-09-06 12:11
お世話さまです。

開発言語はWindowsフォーム+Vb.NETです。

CheckBoxを配置したDataGridにおいて下記のようなことを
やりたいのですが、どのようにすればよいのでしょうか?

@データによって当該行のCheckBoxをDisableまたはInVisibleにする。
Aボタンの押下イベントでチェック可能な全ての行のCheckBoxをTrueにする。
B全ての行のCheckBoxの値(True/False)を取得する。

サンプルとして2列(都道府県、CheckBox)からなるDataGrid
を表示するコードを掲載致します。
(Tbl_Kenには都道府県のコードをセット済みとします。)

' テーブルの列を作成
Dim dataSet1 As New DataSet("都道府県")
Dim dataTable1 As DataTable = dataSet1.Tables.Add("都道府県テーブル")
Dim dataClumn1 As DataColumn = dataTable1.Columns.Add("都道府県")
Dim dataClumn2 As DataColumn = dataTable1.Columns.Add("選択", GetType(Boolean))

' テーブルのスタイルを作成
Dim dgTableStyle As New DataGridTableStyle
dgTableStyle.MappingName = dataTable1.TableName
DataGrid1.TableStyles.Add(dgTableStyle)

' テーブルの列のスタイルを作成
Dim dgColumnStyle1 As New DataGridTextBoxColumn
Dim dgColumnStyle2 As New DataGridBoolColumn
dgColumnStyle1.MappingName = dataClumn1.ColumnName
dgColumnStyle2.MappingName = dataClumn2.ColumnName

' ヘッダーにタイトルを設定
dgColumnStyle1.HeaderText = dataClumn1.ColumnName
dgColumnStyle2.HeaderText = dataClumn2.ColumnName

' チェック・ボックスにNULLは認めない。常にONかOFFを指定
dgColumnStyle2.AllowNull = False

' 列のスタイルをテーブルスタイルに登録
dgTableStyle.GridColumnStyles.Add(dgColumnStyle1)
dgTableStyle.GridColumnStyles.Add(dgColumnStyle2)

' テーブルにデータを追加
Dim ken_name As String
For i = 0 To 46
  Select Case Tbl_Ken(i)
    Case "01" : ken_name = "北海道"
    Case "02" : ken_name = "青 森"
    ・・・
    Case "47" : ken_name = "沖 縄"
  End Select
  dataTable1.Rows.Add(New [Object]() {ken_name, False})
Next

' データグリッドにテーブルを表示する
DataGrid1.SetDataBinding(dataSet1, dataTable1.TableName)

@についてですが、たとえばTbl_ken(i)の値が"13"(東京)の
場合にのみCheckBoxを非表示(ないしDisable)にする場合の
実装方法が解りません。

Aはあるボタンのクリックイベントで東京を除く全ての
CheckBoxをチェックした状態(True)にする実装方法が解りません。

BはDataGridのごくごく基本だと思うのですが、
ユーザが任意にチェックしたCheckBoxの判定方法が解りません。

以上、解らないことだらけで情けないやら申し訳ないやら
なのですが、ご教示頂けると助かります。^^;

宜しくお願い致します。
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2004-09-06 14:51
自己レスです。

AとBについてはなんとか実現できました。

AはDataGridにCheckBoxの列の値をセットしたデータテーブル
を再バインドすることで実装できました。

Bについては
DataGridの行ループの中で下記のように判定できることが判りました。
For i = 0 To 46
  If DataGrid1(i, 1) = True Then
    …
  Else
    …
  End If
Next

で、未だに@の実装方法が判りません。
これについてご存知の方、どうぞ宜しくお願い致します。
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2004-09-06 16:50
またまた自己レスです。^^;

@についてですが、下記のようにしてTrueでもFalseでもない状態を
表示させてみました。

' チェック・ボックスにNULLは認める
dgColumnStyle3.AllowNull = True
dgColumnStyle4.AllowNull = True

For i = 0 To 46
  if Tbl_Ken(i) = "13" Then
    dataTable1.Rows.Add(New [Object]() {ken_name, Nothing})
  Else
    dataTable1.Rows.Add(New [Object]() {ken_name, False})
  End Select
Next

これで、一応指定不可であることは視覚的にはなんとなく
判るのですが、チェックしようと思えばできてしまい、
当初の意図を実装できてはいません。

おまけに、False⇒True⇒Null という3サイクルになってしまい
オン/オフの操作が煩雑にもなってしまっています。

うーむ、完全にDisableにする方法はないのでしょうか?
1

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