こんにちは。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のコンボボックスにデフォルト値を設定したい場合は
どうすればよいのでしょうか?
ご教示よろしくお願い申し上げます。
あくまで参考・・・
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にカラムの設定とデータ格納してます。
以上。
追伸・・・
ソースコードの抜粋なので、当然、そのままコピペしても
エラーします。その辺はご勘弁・・・
※ あくまでやり方のサンプルを提示したまでです。
以上。
オショウ様、ありがとうございます。
つまり、DataGridViewComboBoxColumnにDataSourceを使用した場合は、初期値セットする方法がないということでしょうか?
DataGridViewに行的データをAddする前に、各カラムでの
今回はComboBoxColumnに予めItem情報を設定しないと、
いけない。と言う仕様だと私は認識してます。
後は、データをどのように提供するか・・・
今回はDaatSourceなんでしょうが・・・
ComboBoxColumn等カスタム列を持ったDataGridViewに対し
例えばDBからデータ取得してDataSourceでバインドした
場合、確か正しくComboBoxColumn等カスタム列でのデータ
表示は正しく行われなかった・・・ように記憶してます。
時間があれば試してみますが、それができれば楽できます
が、できない場合は、DataSet等に読み込んで、1行づつ
DataGridViewにAddしていかないと正しく表示されない。
以上。参考まで
ツイート | ![]() |