【问题标题】:Fill a ComboBox with a DataSet用数据集填充组合框
【发布时间】:2019-06-11 20:10:28
【问题描述】:

我正在尝试使用从 SQL 数据库填充的 DataSet,它只有一个具有唯一名称的列来填充 ComboBox。

现在我正在使用这个代码:

ClassTables.FillDistrib()
ComboBox.DataSource = ClassTables.Distrib.Tables("Names")

ClassTables 是用于填充我的 DataSet 的 Class。
Distrib 是我的 DataSet 的名称(FillDistrib 是用于清除和填充它的 Sub)
ComboBox 是名称我的组合框

但是 ComboBox 下拉列表是空白的。
但是,在 DataGridView 中使用时,似乎 DataSet 已正确填充。

【问题讨论】:

标签: vb.net winforms combobox dataset


【解决方案1】:

将复杂对象作为DataTable 分配给ComboBox 或ListBox 控件的DataSource 属性时,使用DisplayMember 属性指定DataTable 的Column 应该是用作显示 ListControl 项的文本的源。

如果所选项目还应返回与显示的文本不同的值,请将ValueMember 属性设置为提供相关值的列的名称。
可能在设置控件的 DataSource 引用之前(以避免底层数据的冗余迭代)。

让我们建立一个DataTable 来测试这个过程:

DataTable 分配给组合框控件的DataSource,将提供要显示的文本的列名称指定为DisplayMember,将提供要显示的附加数据的列名称指定为ValueMember当用户更改 SelectedItem 时,将由 ComboBox.SelectedValue 属性返回:

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()
dt.Rows.Add({"Some Name", 1})
dt.Rows.Add({"Some OtherName Jr.", 2})
dt.Rows.Add({"Another Name", 3})
dt.Rows.Add({"Last Name", 4})

ComboBox1.DisplayMember = "Names"
ComboBox1.ValueMember = "Values"
ComboBox1.DataSource = dt

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

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多