0

再会,

我正在开发一个使用 Visual Basic 2010 和 MySql 的项目。该项目的功能是进行体育计时服务。我对上述环境中的编程知识了解半,当我遇到困难时,我会用谷歌搜索答案,它在 99% 的时间里都能很好地为我服务。

我的问题是:我有一个包含每个体育赛事表格的数据库。所有数据都被捕获,所有功能都按预期工作。我现在想使用四个 GridView 在表单上显示这场比赛的结果(4 是允许的最大比赛距离)。这些结果需要针对每个比赛距离(最多 4 个)单独显示(使用不同的查询)。

我有显示结果的代码,但这会用相同的数据填充所有四个网格视图。这是我的代码:

Private Sub ListResults()

    Dim query As String = "SELECT RaceNo, FirstName, LastName, RaceDistance, RaceTime FROM " & frmMain.EventCode & _
            " WHERE NOT ISNULL(RaceTime) AND RaceDistance = '" & frmMain.RaceDistance1 & "' ORDER BY RaceDistance ASC, RaceTime ASC;"

    Dim connection As New MySqlConnection(frmMain.connStr)
    Dim da As New MySqlDataAdapter(query, connection)
    Dim ds As New DataSet

    Try
        If da.Fill(ds) Then
            dgvLoadResultsA.DataSource = ds.Tables(0)
            dgvLoadResultsB.DataSource = ds.Tables(0)
            dgvLoadResultsC.DataSource = ds.Tables(0)
            dgvLoadResultsD.DataSource = ds.Tables(0)

        End If
    Catch ex As Exception
        Console.WriteLine(ex.Message)
    Finally

        da = Nothing
        connection.Close()
        connection = Nothing
    End Try
End Sub

我知道我需要生成四个不同的查询(我能够做到),但我不确定如何将这些查询的结果发送到不同的网格视图。我似乎并不完全理解如何将我的查询结果发送到数据集中的不同表。我可以通过使用不同的参数和变量运行子程序来创建代码,但我认为有更好的方法来做到这一点。

对此问题的任何帮助将不胜感激。

先感谢您。

4

1 回答 1

0

您需要做的是为每个查询使用不同的 DataSet。

就我个人而言,我会将您的查询代码拆分为一个单独的函数,将事件和距离作为参数并返回您的数据表;

Private Function GetResults(ByVal EventCode As Integer, ByVal RaceDistance As Integer) As DataTable

    Dim query As String = "SELECT RaceNo, FirstName, LastName, 
                           RaceDistance, RaceTime 
                           FROM " & EventCode & _
                         " WHERE NOT ISNULL(RaceTime) 
                           AND RaceDistance = '" & RaceDistance & "' 
                           ORDER BY RaceDistance ASC, RaceTime ASC;"

    Dim connection As New MySqlConnection(frmMain.connStr)
    Dim da As New MySqlDataAdapter(query, connection)
    Dim ds As New DataSet

    Try
        If da.Fill(ds) Then
            Return ds.Tables(0)
        End If
    Catch ex As Exception
        Console.WriteLine(ex.Message)
    Finally

        da = Nothing
        connection.Close()
        connection = Nothing
    End Try
End Sub

我在这里假设您的数据类型,您当然需要修改它以使用正确的数据类型。

然后你可以使用附加你的数据源;

dgvLoadResultsA.DataSource = GetResults(EventCodeA, RaceDistanceA)
dgvLoadResultsB.DataSource = GetResults(EventCodeB, RaceDistanceB)
dgvLoadResultsC.DataSource = GetResults(EventCodeC, RaceDistanceC)
dgvLoadResultsD.DataSource = GetResults(EventCodeD, RaceDistanceD)

理想情况下,您还将连接字符串传递给 GetResults 函数,然后您的函数是可单元测试的,但我会将这个决定留给您。

当然,理想情况下,您应该在附加之前检查您的函数是否返回有效的 DataTable。但我不想使解决方案过于复杂!

于 2013-02-06T21:38:21.807 回答