基于数据表设置 DataGridViewComboBoxColumn 值

Set DataGridViewComboBoxColumn Value Based on a Datatable

我阅读了几篇有关设置组合框值的文章,但我仍然想不出解决方案。

下面是我想做的基本示例,评论中正是我想做的。任何帮助表示赞赏。

  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

您可以通过设置 Cells.Value...

来设置 value
 DataGridView1.Rows(whatrowdoyouwant).Cells("cmb").Value = True 

另一方面,您将 DataSource 设置为 DataGridView,但循环遍历 DataTable。如果你想在 DataGridView 中设置每一行,这将不起作用。

 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

您需要遍历 DataGridView 中的每个 DataGridViewRow 并设置 ComboBox 值。例如...

 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