coder32 coder32 - 3 months ago 13
Vb.net Question

Set ComboBox 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

Answer

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