使用组合框将数据网格视图绑定到数据源



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

VB:如何将DataTable绑定到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

在CCD_ 3事件中。

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

我做错了什么?

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

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

在组合框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

您的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

我通常用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

最新更新