DataGridViewのコンボボックス列に初期値を設定するには?


トーシンex  2009-11-18 04:07:16  No: 146541

こんにちは。VB2008のDataGridViewについて質問です。
DataGridView1のある列のColumnTypeがコンボボックス(DataGridViewComboBoxColumn)だとします。
この列をColumn1として、この列のDataSouceをデータテーブルDataTable1とします。
DataTable1には、IDとTEXTという列があるとします。

Column1.DataSource = DataTable1
Column1.DisplayMember = "TEXT"
Column1.ValueMember = "ID"

さて、ここで、DataGridView1の行を追加し、コンボボックスに初期値を表示させたいのですが、
例えば、データテーブルDataTable1のID列に"0"という値が必ず存在するとして、
DataGridView.Rows.Add("0")  'コンボボックスの位置に該当する
としたり、
DataGridView.Rows(存在する行インデックス).Cells(0).Value = "0"
とすると、DataErrorとなってしまいます。
DataGridViewComboBoxColumnにはSelectedValueプロパティがないようなので、普通のコンボボックスのように
デフォルト値を設定することができないのですが、DataGridViewのコンボボックスにデフォルト値を設定したい場合は
どうすればよいのでしょうか?
ご教示よろしくお願い申し上げます。


オショウ  2009-11-18 07:11:49  No: 146542

あくまで参考・・・

        With DataGridView1
            .Columns.Add("SensourName", "製品種別")
            Using col As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn
                With col
                    .Name = "Type2"
                    .Items.Clear()
                    .Items.Add("なし")
                    .Items.Add("走行軸タイプ")
                    .Items.Add("昇降軸タイプ")
                End With
                .Columns.Add(col)
            End Using
            .Columns("Type2").HeaderText = "センサ種別(方向)"
            Using col As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn
                With col
                    .Name = "Type1"
                    .Items.Clear()
                    .Items.Add("1軸タイプ")
                    .Items.Add("2軸タイプ")
                End With
                .Columns.Add(col)
            End Using
        End With

        Using ds As DataSet = New DataSet
            Dim objDT(2) As Object
            ds.ReadXml("HogeMaster.xml", XmlReadMode.ReadSchema)
            DataGridView1.Rows.Clear()
            If ds.Tables("HogeData").Rows.Count > 0 Then
                For Each dr As DataRow In ds.Tables("HogeData").Rows
                    objDT(0) = dr.Item("SensourName").ToString
                    Select Case CType(Integer.Parse(dr.Item("Type2").ToString), SENSOUR_TYPE2)
                        Case SENSOUR_TYPE2.TYPE_None
                            objDT(1) = "なし"
                        Case SENSOUR_TYPE2.TYPE_Running
                            objDT(1) = "走行軸タイプ"
                        Case SENSOUR_TYPE2.TYPE_Lifting
                            objDT(1) = "昇降軸タイプ"
                    End Select
                    Select Case CType(Integer.Parse(dr.Item("Type1").ToString), SENSOUR_TYPE1)
                        Case SENSOUR_TYPE1.TYPE_SingleAxis
                            objDT(2) = "1軸タイプ"
                        Case SENSOUR_TYPE1.TYPE_DoubleAxis
                            objDT(2) = "2軸タイプ"
                    End Select
                    DataGridView1.Rows.Add(objDT)
                Next
            End If
        End Using

    のように、してDataGridView1にカラムの設定とデータ格納してます。

以上。


オショウ  2009-11-18 07:13:21  No: 146543

追伸・・・

ソースコードの抜粋なので、当然、そのままコピペしても
エラーします。その辺はご勘弁・・・

※  あくまでやり方のサンプルを提示したまでです。

以上。


トーシンex  2009-11-18 20:09:34  No: 146544

オショウ様、ありがとうございます。
つまり、DataGridViewComboBoxColumnにDataSourceを使用した場合は、初期値セットする方法がないということでしょうか?


オショウ  2009-11-18 20:42:30  No: 146545

DataGridViewに行的データをAddする前に、各カラムでの
今回はComboBoxColumnに予めItem情報を設定しないと、
いけない。と言う仕様だと私は認識してます。

後は、データをどのように提供するか・・・
今回はDaatSourceなんでしょうが・・・

ComboBoxColumn等カスタム列を持ったDataGridViewに対し
例えばDBからデータ取得してDataSourceでバインドした
場合、確か正しくComboBoxColumn等カスタム列でのデータ
表示は正しく行われなかった・・・ように記憶してます。

時間があれば試してみますが、それができれば楽できます
が、できない場合は、DataSet等に読み込んで、1行づつ
DataGridViewにAddしていかないと正しく表示されない。

以上。参考まで


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加