用一行代码加载组合框?

时间:2015-04-17 14:16:56

标签: vb.net winforms combobox

我的表单上有大约15个组合框,所有这些组合框都是从表中提取的相同信息(约150个条目)。目前我从表中获取信息,然后循环访问条目并将它们添加到每个文本框中。我想知道是否有更有效的方法来加载这些组合框,然后必须将表条目单独添加到每个组合框中,必须在For循环中列出15行代码。

我没有看到任何性能问题,但我认为我可能会以最有效的方式工作,而不是坚持使用有效的方法。 :)

3 个答案:

答案 0 :(得分:5)

您可以创建组合框列表,然后循环浏览它们。例如:

Dim cbos() As ComboBox = {ComboBox1, ComboBox2, ComboBox3}
For Each cbo As ComboBox In cbos
    ' Load cbo from table
Next

或者,如果它们的名称一致,您可以按名称找到组合框:

For i As Integer = 1 to 15
    Dim cbo As ComboBox = DirectCast(Controls("ComboBox" & i.ToString())), ComboBox)
    ' Load cbo from table
Next

答案 1 :(得分:2)

由于Combobox项目是一个集合,如果它们的元素相同,您可以使用要插入的对象构建数组,然后使用方法{将此数组插入每个ComboBox {1}}(这是一种存在于Combobox.items中的方法)。

从MSDN获取示例:

AddRange()

然后你只需要做一个循环就可以将数组添加到每个ComboBox中。当然,您需要首先自己构建数组,而不是示例中的简单字符串数组。

参考:

MSDN - AddRange

答案 2 :(得分:2)

你也可以这样做,因为你提到你已经有了一张桌子。

  1. 使用数据表
  2. 将表对象更改为数据表,这将有助于绑定到组合框。如果您也将数据表添加到数据集中可能会有所帮助。这样,您可以将所有ComboBox(它们是允许用户查看信息的UI元素)附加到数据集中相同的 DataSource (数据表)。

    1. 结合
    2. 现在您需要做的就是遍历所有组合框并将数据源设置为同一个表,即如果您决定以编程方式执行此操作:

      ComboBox1.DataSource = ds.Tables(0)
      ComboBox1.ValueMember = "au_id"
      ComboBox1.DisplayMember = "au_lname"
      

      使用上面的示例进一步了解此问题here

      然后,您还可以使用ComboBox1.selectedValue获取用户选择的值。

      另一方面,如果您使用C#WPF执行此操作,您可以直接绑定XAML中的每个comboBox,我不确定这是否可以在VB.net中完成,因为我试图查找该选项但是没有管理这样做,你可能想尝试一下。

      一些非常有用的数据绑定教程和指南,您可能会对此感兴趣:

      表示您的问题的推荐阅读

      MSDN: Connect data to objects

      DotNetPerls on DataGridView(请注意,这不是组合框,仅显示值)

      VBNet DataTable Usage from DotNetPerls(这与1相关。)

      SO Q&A on Binding a comboBox to a datasource

      Concepts of Databinding