我在询问之前先阅读了这些内容
VB: How to bind a DataTable to a DataGridView?
http://msdn.microsoft.com/en-us/library/fbk67b6z(v=vs.100).aspx
我有一个非常简单的问题。 vb.net winforms项目包含几个数据表,一个组合框和一个datagridview。
我可以选择要显示的数据表:
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)
,但没有更好的结果。
我做错了什么简单的事情?
答案 0 :(得分: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
。
答案 1 :(得分:0)
您的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
答案 2 :(得分:0)
我通常用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