DataGridViewのコンボボックスの列を追加する。
「コンボボックスの表示のテキスト」と「実際の値」を別にして、コンボボックスを表示するにはDataGridViewComboBoxColumn
のDataSource
に設定する必要がある。
こんな感じでやりたい
以下、ソース
ChoiceContainer
クラスは項目を格納するためのクラスとなっている
' テキスト列の追加 DetailDataGridView1.Columns.Add( New DataGridViewTextBoxColumn With { .HeaderText = "名前", .DataPropertyName = "Name" } ) ' ----------------------------------------------- ' == コンボボックスの項目リストの作成 == Dim choiceList As New List(Of ChoiceContainer) choiceList.Add(New ChoiceContainer("1", "男")) choiceList.Add(New ChoiceContainer("2", "女")) ' == 列の作成 == Dim cmbBoxCol As New DataGridViewComboBoxColumn cmbBoxCol.HeaderText = "性別" ' DataGridView1.DataSourceに設定したデータ内で表示したいプロパティと同じ名前 cmbBoxCol.DataPropertyName = "Gender" ' コンボボックスの項目リストを設定する cmbBoxCol.DataSource = choiceList ' コンボボックスに表示するコンテナ(ChoiceContainer)のプロパティ(ValueとDisplayText)と一致させる cmbBoxCol.DisplayMember = "DisplayText" cmbBoxCol.ValueMember = "Value" ' 列へ追加 DataGridView1.Columns.Add(cmbBoxCol) ' 表示データ作成 Dim testList As New List(Of Test) testList.Add(New Test("太郎", "1")) testList.Add(New Test("花子", "2")) DataGridView1.DataSource = TestList
''' <summary> ''' コンボボックスの項目コンテナ ''' </summary> Public Class ChoiceContainer ''' <summary>実際の値</summary> Public Property Value As String ''' <summary>表示テキスト</summary> Public Property DisplayText As String Public Sub New(ByVal value As String, ByVal displayText As String) Me.Value = value Me.DisplayText = displayText End Sub End Class
Public Class Test Public Property Name As String Public Property Gender As String Public Sub New(name As String, gender As String) Me.Name = name Me.Gender = gender End Sub End Class