Question

I have a DataGridView that I would like to fill programmatically. By creating a DataTable and binding it through a BindingSource to a DataGridView, the columns in the DataGridView are created as TextBoxColumns. A code sample below:

Dim dataTable As DataTable = New DataTable()
dataTable.Columns.AddRange(New DataColumn() {New DataColumn("TextBoxColumn1"),
                                             New DataColumn("TextBoxColumn2"),
                                             New DataColumn("ComboBoxColumn"),
                                             New DataColumn("TextBoxColumn3"),
                                             New DataColumn("TextBoxColumn4")})

Dim bindingSource As BindingSource = New BindingSource
bindingSource.DataSource = dataTable
dataGridView.DataSource = bindingSource

What is the best way to make the column "ComboBoxColumn" a ComboBoxColumn in the DataGridView?

I could create a ComboBoxColumn in the DataGridView manually and then bind it to a DataColumn, but I would like to know if there's a better way, like setting a property in the DataColumn or something like that.

Was it helpful?

Solution

Following @Codesleuth's suggestion, I replaced the auto generated DataGridViewTextBoxColumn with a DataGridComboBoxColumn like this:

Dim comboBoxColumn As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn()
comboBoxColumn.DataPropertyName = "ComboBoxColumn"
comboBoxColumn.DataSource = comboBoxBindingSource
comboBoxColumn.DisplayMember = "ComboBoxColumn"
comboBoxColumn.ValueMember = "ComboBoxColumn"
DataGridView.Columns.RemoveAt(COLUMN_INDEX)
DataGridView.Columns.Insert(COLUMN_INDEX, comboBoxColumn)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top