我正在尝试使用从SQL数据库填充的数据集,该数据集只有一列具有唯一名称的列可用于填充ComboBox。
现在我正在使用此代码:
ClassTables.FillDistrib()
ComboBox.DataSource = ClassTables.Distrib.Tables("Names")
ClassTables
是用于填充我的数据集的类。
Distrib
是我的数据集的名称(FillDistrib
是用于清除和填充它的Sub)
ComboBox
是我的组合框的名称
但是ComboBox下拉列表留为空白。
但是,在DataGridView中使用时,似乎已正确填充了DataSet。
答案 0 :(得分:1)
在将复杂对象作为DataTable
分配给ComboBox或ListBox控件的DataSource属性时,请使用DisplayMember属性指定哪个 Column
< DataTable的/ strong>应该用作显示ListControl项目文本的源。
如果所选项目还应返回与显示的文本不同的值,则还应将ValueMember属性设置为提供相关值的列的名称。
可能在设置控件的DataSource引用之前(以避免基础数据的重复迭代)。
让我们构建一个DataTable
来测试该过程:
将DataTable
分配给ComboBox控件的DataSource
,将提供要显示的文本的列的名称指定为DisplayMember
,并将ValueMember
的名称指定为ComboBox.SelectedValue
当用户更改 SelectedItem
时将提供 Dim dt As New DataTable("TestTable")
dt.Columns.AddRange({
New DataColumn("Names", GetType(String)),
New DataColumn("Values", GetType(Integer))
})
Dim row As DataRow = dt.NewRow()
row.ItemArray = New Object() {"Some Name", 1}
dt.Rows.Add(row)
row = dt.NewRow()
row.ItemArray = New Object() {"Some OtherName Jr.", 2}
dt.Rows.Add(row)
row = dt.NewRow()
row.ItemArray = New Object() {"Another Name", 3}
dt.Rows.Add(row)
row = dt.NewRow()
row.ItemArray = New Object() {"Last Name", 4}
dt.Rows.Add(row)
ComboBox1.DisplayMember = "Names"
ComboBox1.ValueMember = "Values"
ComboBox1.DataSource = dt.DefaultView
Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
Dim cbo = DirectCast(sender, ComboBox)
TextBox1.Text = cbo.GetItemText(cbo.SelectedValue)
End Sub
属性返回的其他数据的列:
$cmd = @'
p4 changes @2018/01/16','@now
'@;
Invoke-Expression $cmd
结果: