我有一个带有4个标签的表单,每个标签包含一个datagridview。我想用数据库中的不同表填充这些网格中的每一个,但是查询的结果不断累积,直到最终表包含4个查询的结果。
这是我的代码:

    Try
        mysqlconn.Open()
        Dim query As String
        query = "SELECT* from venue"
        command = New MySqlCommand(query, mysqlconn)

        SDA.SelectCommand = command
        SDA.Fill(dbdataset)
        bsource.DataSource = dbdataset
        DataGridView1.DataSource = bsource
        SDA.Update(dbdataset)

        query = "SELECT* FROM Decoration"
        command = New MySqlCommand(query, mysqlconn)

        SDA.SelectCommand = command
        SDA.Fill(dbdataset)
        bsource.DataSource = dbdataset
        DataGridView2.DataSource = bsource
        SDA.Update(dbdataset)

        query = "SELECT* FROM food_drink"
        command = New MySqlCommand(query, mysqlconn)

        SDA.SelectCommand = command
        SDA.Fill(dbdataset)
        bsource.DataSource = dbdataset
        DataGridView3.DataSource = bsource
        SDA.Update(dbdataset)

        query = "SELECT* FROM Entertainment"
        command = New MySqlCommand(query, mysqlconn)

        SDA.SelectCommand = command
        SDA.Fill(dbdataset)
        bsource.DataSource = dbdataset
        DataGridView4.DataSource = bsource

        mysqlconn.Close()
    Catch ex As MySqlException
        MsgBox(ex.Message)
    Finally
        mysqlconn.Dispose()
    End Try


当我更改它以便每个查询都有自己的datatable(dbdataset)时,我只获取显示最终查询结果的所有datagridviews。

Try
        mysqlconn.Open()
        Dim query As String
        query = "SELECT* from venue"
        command = New MySqlCommand(query, mysqlconn)

        SDA.SelectCommand = command
        SDA.Fill(dbdataset1)
        bsource.DataSource = dbdataset1
        DataGridView1.DataSource = bsource
        SDA.Update(dbdataset1)

        query = "SELECT* FROM Decoration"
        command = New MySqlCommand(query, mysqlconn)

        SDA.SelectCommand = command
        SDA.Fill(dbdataset2)
        bsource.DataSource = dbdataset2
        DataGridView2.DataSource = bsource
        SDA.Update(dbdataset2)

        query = "SELECT* FROM food_drink"
        command = New MySqlCommand(query, mysqlconn)

        SDA.SelectCommand = command
        SDA.Fill(dbdataset3)
        bsource.DataSource = dbdataset3
        DataGridView3.DataSource = bsource
        SDA.Update(dbdataset3)

        query = "SELECT* FROM Entertainment"
        command = New MySqlCommand(query, mysqlconn)

        SDA.SelectCommand = command
        SDA.Fill(dbdataset4)
        bsource.DataSource = dbdataset4
        DataGridView4.DataSource = bsource
        SDA.Update(dbdataset4)

        mysqlconn.Close()
    Catch ex As MySqlException
        MsgBox(ex.Message)
    Finally
        mysqlconn.Dispose()
    End Try

最佳答案

您可以缩小代码长度。在命令中使用多个查询,用分号将它们分开,每个查询将加载到DataTable中。然后将您的网格绑定到正确的数据表:

Try
    mysqlconn.Open()
    Dim query As String
    query = "SELECT* from venue;SELECT* FROM Decoration;SELECT* FROM food_drink;SELECT* FROM Entertainment;"
    SDA.SelectCommand = New MySqlCommand(query, mysqlconn)
    SDA.Fill(dbdataset)

    DataGridView1.DataSource = dbdataset.Tables(0)
    DataGridView2.DataSource = dbdataset.Tables(1)
    DataGridView3.DataSource = dbdataset.Tables(2)
    DataGridView4.DataSource = dbdataset.Tables(3)

    mysqlconn.Close()
Catch ex As MySqlException
    MsgBox(ex.Message)
Finally
    mysqlconn.Dispose()
End Try


您还可以创建4个绑定源并绑定到这些绑定源,而不是直接绑定到表。另外,您还应该处置连接和命令。

09-03 21:08