Vb.net 使用组合框将datagridview绑定到数据源

Vb.net 使用组合框将datagridview绑定到数据源,vb.net,winforms,datagridview,binding,datasource,Vb.net,Winforms,Datagridview,Binding,Datasource,我在问之前读过这些: 我有一个非常简单的问题。vb.net winforms项目包含几个数据表、一个组合框和一个datagridview 我可以选择要显示的数据表,如下所示: datagridview1.datasource=dt1'或dt2或dt3 这个很好用 我想做的是从combobox选择中选择要显示的datatable,我以前在这里定义了一个combobox项集合,因此: combobox1.item.add("dt1") combobox1.item.add("dt2") combob

我在问之前读过这些:

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

我可以选择要显示的数据表,如下所示:

datagridview1.datasource=dt1'或dt2或dt3

这个很好用

我想做的是从combobox选择中选择要显示的datatable,我以前在这里定义了一个combobox项集合,因此:

combobox1.item.add("dt1")
combobox1.item.add("dt2")
combobox1.item.add("dt3")
我把这条线

datagridview.datasource=combobox1.SelectedItem

在组合框1中,您选择了索引更改事件

这将清空我的datagridview。我最初的想法是,这会失败,因为我将字符串传递给需要对象的对象,所以我尝试了datagridview.datasource=cobjcombox1.SelectedItem,但没有更好的结果

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

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

在您的ComboBox1\u SelectedIndexChanged事件中执行此操作:

选择Case组合框1.SelectedItem 案例dt1 datagridview1.datasource=dt1 案例dt2 datagridview1.datasource=dt2 案例dt3 datagridview1.datasource=dt3 结束选择
我通常用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

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

combobox1.DisplayMember = "TableName"
combobox1.DataSource = {dt1, dt2, dt3}
' Or... (DisplayMember value applies anyway)
'combobox1.Items.AddRange({dt1, dt2, dt3})
在ComboBox事件处理程序中,设置DataGridView.DataSource:


如果要改为使用SelectedIndexChanged事件,请检查SelectedIndex是否<0,如果是,则返回

对于像我们这样有经验的人来说,这是个不错的方式,但是对于初学者来说可能会有点冗长和陌生。谢谢。我只是在为我自己的问题键入一个答案,这个问题涉及一个if组合框。SelectedIndex=0然后。。。。。当你的答案弹出时的陈述列表。我感谢你的时间。如果你已经解决了你的问题,你应该接受其中一个答案,或者如果你使用了不同的方法,写下你自己的答案,并将其作为答案。谢谢。我只是在为我自己的问题键入一个答案,这个问题涉及一个if组合框。SelectedIndex=0然后。。。。。当你的答案弹出时的陈述列表。谢谢你的时间。@DaveLowe:噢!我真的没有在回答下面看到你的名字。我以为你是从vb.net开始的。xD@DaveLowe:另外,如果您不知道组合框项目的索引及其顺序,则索引将更加困难。在那里,SelectedItem工作得更好。
Private Sub combobox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles combobox1.SelectionChangeCommitted
    dataGridView1.DataSource = DirectCast(combobox1.SelectedItem, DataTable)
End Sub