在 VbNet 的 datagridview 中填充组合框 来自其他 table

Populate combobox in datagridview in VbNet From other table

我有一个包含 3 个 TextBox 列和 1 个 ComboBox 列的 DataGridView。我尝试用来自其他 table 的数据填充 ComboBox 列,但没有结果,我们将不胜感激。

这是代码

Dim conn As OleDb.OleDbConnection = DBConnect.getDbConnection()
dgv.Rows.Clear()

Try

    Dim selectSql = "select idf,cb,rgso from libroacquisti " 

    Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(selectSql, conn)
    Dim ds As DataSet = New DataSet
    da.Fill(ds, "Libroacquisti")
    Dim dt As DataTable = ds.Tables("libroacquisti")
    Dim row As DataRow

    If dt.Rows.Count > 0 Then
        For Each row In dt.Rows
            Me.dgv.Rows.Add(row("idf"),row("cb"), row("rgso"),THIS IS COMBOBOX COLUMN AND I SHOULD WANT TO POPULATE IT FROM ANOTHER TABLE BY SQL QUERY )
        Next row
    End If

但是,必须考虑到DataGridView的每一行,在相关的ComboBox中,数据总是相同的,并且是从同一个table.

中提取出来的

为了从 table 数据填充组合框列,您需要为组合框设置单独的数据集和绑定源以从中提取数据。

使用您的 'sub' table 填充您的数据集,数据网格视图中的数据将引用该数据集。对于组合框,您只需要两列。一个用于将由 DataGridView 的 ComboBoxColumn 中的数据引用的 ID,另一个用于将显示的值。

将新的 BindingSource 控件拖放到表单设计器中

将 DataSource 属性 设置为 DataSet,并将 DataMember 属性 设置为 DataSet

中的 Table 名称

然后将 ComboBoxColumn 的数据源 属性 设置为您的 BindingSource 并设置其 DisplayMember 和 ValueMember 属性。

现在您的 DataGridView 应该为每一行选择了适当的值,并且填充的组合框列表显示了您设置为 DisplayMember 的数据集中填充的值:

Dim selectSql = "select ValueColumn,DisplayColumn " 

Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(selectSql, conn)
Dim ds As DataSet = New DataSet
da.Fill(ds, "ComboValues")

BSComboValues.DataSource = ds
BSComboValues.DataMember = "ComboValues"

Dim ComboColumn As DataGridViewComboBoxColumn = dgv.Columns("ComboColumnName")
ComboColumn.DataSource = BSComboValues
ComboColumn.ValueMember = "ValueColumn"
ComboColumn.DisplayMember = "DisplayColumn"