Search code examples
vb.netdatagridviewcomboboxdatagridviewcolumn

Set DataGridViewComboBoxColumn Value Based on a Datatable


I read several article relating to setting the value of a combobox however I still couldn't come up with a solution.

Below is a basic example of what I want to do and in the comments is exactly what I want to do. Any help is appreciated.

  Public Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Dim dt As New DataTable
    dt.Columns.Add("ID")
    dt.Columns.Add("Name")
    dt.Columns.Add("Value")
    dt.Columns(0).AutoIncrement = True

    For i As Integer = 0 To 20
        Dim R As DataRow = dt.NewRow
        R("Name") = "Test" & Date.Now & "" & i
        If i = 2 Or i = 5 Or i = 6 Or i = 8 Or i = 10 Then
            R("Value") = "yes"
        Else
            R("Value") = "no"
        End If
        dt.Rows.Add(R)
        DataGridView1.DataSource = dt
    Next

    DataGridView1.ReadOnly = False

    Dim cmb As New DataGridViewComboBoxColumn()
    cmb.HeaderText = "Select Data"
    cmb.Name = "cmb"
    cmb.MaxDropDownItems = 2
    cmb.Items.Add("True")
    cmb.Items.Add("False")
    DataGridView1.Columns.Add(cmb)

    For Each dr As DataRow In dt.Rows
        If dr("Name").ToString = "Test" Then
            'set the combo box value to True
        Else
            'set the combobox value to False
        End If
    Next

End Sub

Solution

  • You can set the value by setting the Cells.Value...

     DataGridView1.Rows(whatrowdoyouwant).Cells("cmb").Value = True 
    

    On another note, you set the DataSource to the DataGridView, but loop through the DataTable. If you want to set each row in the DataGridView this wont work.

     For Each dr As DataRow In dt.Rows
        If dr("Name").ToString = "Test" Then
            'set the combo box value to True
        Else
            'set the combobox value to False
        End If
     Next
    

    You would need to loop through each DataGridViewRow in the DataGridView and set the ComboBox value. For example...

     For i As Integer = 0 To DataGridView1.Rows.Count - 1
        If DataGridView1.Rows(i).Cells("Name").Value.ToString = "Test" Then
            DataGridView1.Rows(i).Cells("cmb").Value = True 
        Else
            DataGridView1.Rows(i).Cells("cmb").Value = False
        End If
     Next