在 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"
我有一个包含 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"