DataGridViewのチェックボックスに関して

解決


misamisa  2012-07-19 15:21:21  No: 103324  IP: 192.*.*.*

開発環境:Visual Basic 2008

教えて下さい。

あらかじめ画面の起動時に、以下のようなテーブルを作成し、DataGridViewと関連付けをしています。

その後、チェックボックスを設けたい為、関連付けをした後、その記述をしています。

このようなケースで、チェックボックスをあらかじめチェックが付いたような状態としておくのは
どのように記述すれば良いでしょうか?

また、プログラム内でデータをDataGridViewに追加していますが、その際に、データの内容によって
チェックボックスのチェックを切り替えるような事をしたいと考えています。

どのように記述すれば良いでしょうか?

よろしくお願いします。

《画面起動時》

Private Sub ABC_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    'データセットにテーブルを追加する
    dtTable = dtSet.Tables.Add("AAA_TBL")

    'テーブルにフィールドを追加する
    dtTable.Columns.Add("NO", Type.GetType("System.String"))
    dtTable.Columns.Add("数量", Type.GetType("System.String"))
    dtTable.Columns.Add("型番", Type.GetType("System.String"))

    'DataGridViewにデータを表示する
    G_ZZZ.DataSource = dtTable

    Dim Col As New DataGridViewCheckBoxColumn()
    Col.HeaderText = "選択"  '列ヘッダのテキスト
    'Col.DataPropertyName = "Column2"    '連結列の名前
    Col.TrueValue = 1       'チェックボックス=On の値
    Col.FalseValue = 0      'チェックボックス=Off の値

    G_ZZZ.Columns.Insert(0, Col)    '先頭列に割り当て

《DataGridViewセット時》

    Do Until HCOUNT >= FCOUNT   ※  データの分だけ繰り返し

        Dim data_row As DataRow = dtTable.NewRow()

        data_row("NO") = IN_Items(DCOUNT, 0)
        data_row("数量") = IN_Items(DCOUNT, 1)
        data_row("型番") = IN_型番(DCOUNT)

        dtTable.Rows.Add(data_row)

        HCOUNT = HCOUNT + 1
    Loop

  この中へチェックボックスの記述つ追加する???

編集 削除
とくま  2012-07-20 16:54:25  No: 103325  IP: 192.*.*.*

DataSource に Boolean 型のフィールドを追加しておけば、
バインド時に自動で追加してくれます。
実体は DataGridViewCheckBoxColumn が追加されます。
#  なぜ、質問のコードでは"数量"の項目を String 型で定義しているのでしょうか?
#  数値型で定義すればいいのでは?

編集 削除
魔界の仮面弁士  2012-07-20 18:20:57  No: 103326  IP: 192.*.*.*

> Type.GetType("System.String")
「GetType(String)」の構文を使いましょう。


> チェックボックスを設けたい為、関連付けをした後、その記述をしています。
とくまさんが書かれているように、バインド元の DataTable に対して
Boolean 列を用意しておくのが楽かと思います。

G_ZZZ.AutoGenerateColumns = True
G_ZZZ.DataSource = dtTable

Dim Col As New DataGridViewCheckBoxColumn()
Col.HeaderText = "選択"
Col.Name = "選択"
Col.DataPropertyName = "選択列"
Col.ValueType = GetType(Boolean)
Col.TrueValue = True
Col.FalseValue = False

G_ZZZ.AutoGenerateColumns = False
dtTable.Columns.Add("選択列", GetType(Boolean)).DefaultValue = True
G_ZZZ.Columns.Insert(0, Col)



> データの内容によってチェックボックスのチェックを切り替えるような事をしたいと考えています。

たとえば、「[数量]列がマイナスならば、[返品]列にチェックを入れる」のようなケースでしょうか。
データを変更したときに、チェックの状態を自動的に書き換えたいという意図ならば…

DataGridView 側で処理する場合:  DataGridView の CellValueChanged イベントで加工できます。
DataTable 側で処理する場合:  DataTable の RowChanged イベントで加工できます。

編集 削除
misamisa  2012-08-10 09:30:56  No: 103327  IP: 192.*.*.*

とくま様、魔界の仮面弁士様、ご回答が遅くなりまして大変申し訳ありません。

うっかりお礼をしたと勘違いしておりました。。。

ご指摘の通り、DataTable に対してBoolean 列を用意する事により解決
しました。

ありがとうございました。

編集 削除