【问题标题】:Binding a datagridview to a datasource using a combobox使用组合框将 datagridview 绑定到数据源
【发布时间】:2020-07-18 05:55:57
【问题描述】:

我在提问之前阅读了这些:

VB: How to bind a DataTable to a DataGridView?

http://msdn.microsoft.com/en-us/library/fbk67b6z(v=vs.100).aspx

我有一个非常简单的问题。 vb.net winforms 项目包含几个数据表、一个组合框和一个数据网格视图。

我可以选择要显示的数据表:

datagridview1.datasource = dt1 'or dt2 or dt3

这很好用。

我想要做的是从组合框选择中选择要显示的数据表,我之前在其中定义了一个组合框项目集合:

combobox1.item.add("dt1")
combobox1.item.add("dt2")
combobox1.item.add("dt3")

我放了这条线

datagridview.datasource = combobox1.SelectedItem

ComboBox1_SelectedIndexChanged 事件中。

这只是让我的 datagridview 空白。我最初的想法是这失败了,因为我将一个字符串传递给需要一个对象的东西,所以我尝试了datagridview.datasource = CObj(combobox1.SelectedItem),但没有更好的结果。

我做错了什么简单的事情?

【问题讨论】:

    标签: vb.net winforms datagridview binding datasource


    【解决方案1】:

    将您的 DataTable 对象引用直接添加到 ComboBox.Items 集合。

    combobox1.DisplayMember = "TableName"
    combobox1.DataSource = {dt1, dt2, dt3}
    ' Or... (DisplayMember value applies anyway)
    'combobox1.Items.AddRange({dt1, dt2, dt3})
    

    在 ComboBox SelectionChangeCommitted 事件处理程序中,设置DataGridView.DataSource

    Private Sub combobox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles combobox1.SelectionChangeCommitted
        dataGridView1.DataSource = DirectCast(combobox1.SelectedItem, DataTable)
    End Sub
    

    如果您想改用SelectedIndexChanged 事件,请检查是否为SelectedIndex < 0,如果是则只检查Return

    【讨论】:

      【解决方案2】:

      我通常用 c# 编写代码,但这种迂回方法也可以:

          If combobox1.SelectedItem = "dt1" Then
              datagridview1.DataSource = dt1
          ElseIf combobox1.SelectedItem = "dt2" Then
              datagridview1.DataSource = dt2
          ElseIf combobox1.SelectedItem = "dt3" Then
              datagridview1.DataSource = dt3
          End If
      

      【讨论】:

      • 谢谢。我只是在输入我自己的问题的答案,其中涉及 if combobox.SelectedIndex = 0 then..... 当您的答案弹出时的语句列表。感谢您的宝贵时间。
      • @DaveLowe:哦!真的没有在那个答案下面看到你的名字。我以为你是从 vb.net 开始的。 xD
      • @DaveLowe:如果您不知道组合框项目的索引及其顺序,索引也会更难。在那里,SelectedItem 效果更好。
      【解决方案3】:

      您的ComboBox 只是一个字符串列表,因此当您执行datagridview.datasource = combobox1.SelectedItem 时,您实际上并没有将数据源设置为数据表。

      我会在你的 ComboBox1_SelectedIndexChanged 活动中这样做:

      Select Case combobox1.SelectedItem
          Case "dt1"
              datagridview1.datasource = dt1
          Case "dt2"
              datagridview1.datasource = dt2
          Case "dt3"
              datagridview1.datasource = dt3
      End Select
      

      【讨论】:

      • 对于像我们这样有经验的人来说是一个不错的方法;),但是对于初学者来说可能有点冗长和陌生。
      • 谢谢。我只是在输入我自己的问题的答案,其中涉及 if combobox.SelectedIndex = 0 then..... 当您的答案弹出时的语句列表。感谢您的宝贵时间。
      • 如果你已经解决了你的问题,你应该接受其中一个答案,或者如果你使用了不同的方法,你应该写下你自己的答案并接受它作为答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 2013-09-20
      • 1970-01-01
      相关资源
      最近更新 更多