【问题标题】:Select only certain values from binding source to be displayed in combobox仅从绑定源中选择某些值以显示在组合框中
【发布时间】:2016-06-02 18:40:20
【问题描述】:

我正在尝试操作组合框以仅显示我希望从绑定源中获得的某些值。这是我目前拥有的代码。

 provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
    datafile = "C:\Users\Jacob\Desktop\Halton\HaltonProject.accdb"
    connString = provider & datafile
    myConnection.ConnectionString = connString
    myConnection.Open()

    Dim str As String
    str = "SELECT * FROM [Employee] WHERE (SP_Level <>  0)"
    Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
    Dim dr As OleDbDataReader = cmd.ExecuteReader


    Dim Full_Name As String

    While dr.Read
        Full_Name = dr("Full_Name").ToString
        SP_Emp1.Items.Add(Full_Name)
        SP_Emp2.Items.Add(Full_Name)
        SP_Emp3.Items.Add(Full_Name)
        SP_Emp4.Items.Add(Full_Name)
    End while

就目前而言,此代码查看“SP_Level”并过滤掉其中列出“0”的所有员工。字符串“Full_Name”返回在“SP_Level”列中列为“0”以外的所有员工。

我想将组合框数据绑定到 EmployeeBindingSource,同时只显示由上面的代码生成的新过滤的“Full_Name”字符串。我尝试过滤绑定源,但只返回第一个匹配的字母字符串然后停止。我确定有一个简单的解决方案,我似乎找不到它

Data bound combobox

Access table used in data-binding

我对 VB 编程很陌生,因此如果措辞不当,我深表歉意。如果我能更好地解释什么,请告诉我。

【问题讨论】:

  • SP_Level 是字符串吗?没有理由将其连接起来。只是WHERE (SP_Level &lt;&gt; 0) 你的循环没有什么意义。 userFound 和 Full_Name 将只是循环中的最后一项,除非您没有向我们展示所有内容。
  • 每一行代表一个新的过滤器SP &gt;0、PB &gt;0 等。您可以为每个条件创建不同的视图并绑定到它,而不是尝试让一个源来执行此操作。像这样的多种技能应该是一张自己的 1:m 表。
  • 感谢 LarsTech 的提示。我已经修改了 OP 以显示我最初尝试过的内容,它确实以我希望的方式填充组合框,但显然它不能是数据绑定的,并且允许以编程方式更改值。 Plutonix - 没错,我必须为每个场景做这个过滤。我不确定我是否理解您的建议,我很抱歉

标签: .net vb.net data-binding combobox


【解决方案1】:

您可以为每个行/技能集拥有/使用相同的DataSource,您只需要相应地过滤每个。这将为每个条件创建一个DataView,而不是手动从源中过滤掉一些或使用新查询来创建仅略有不同的源:

' my fake table
Dim colors As String() = {"Red", "Green", "Blue", "Orange", "White"}
Dim dt As New DataTable
dt.Columns.Add("color", GetType(String))

For Each s As String In colors
    dt.Rows.Add(s)
Next

' create a view for each level and bind it
Dim SPView As New DataView(dt, "Color <> 'Red'", "", DataViewRowState.CurrentRows)
ComboBox1.DataSource = SPView
ComboBox1.DisplayMember = "color"

Dim XPView As New DataView(dt, "Color <> 'Green'", "", DataViewRowState.CurrentRows)
ComboBox2.DataSource = XPView
ComboBox2.DisplayMember = "color"

Dim ZPView As New DataView(dt, "Color <> 'Blue'", "", DataViewRowState.CurrentRows)
ComboBox3.DataSource = ZPView
ComboBox3.DisplayMember = "color"

【讨论】:

  • 非常感谢,我被困在这个问题上很长一段时间了。我希望这只是一些我以前从未见过/听说过的新语法!非常感谢,祝您度过余下的一天。
猜你喜欢
  • 1970-01-01
  • 2013-01-07
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多