从DataSet中不同DataTables的列绘制多个图表系列

时间:2015-07-20 15:14:00

标签: vb.net

这里新到vb.net。我正在开发一个窗口表单,允许我从Access数据库中筛选研究结果。用户选择确定要查询基本案例和比较案例的Access表,并将结果传递给每个的单独数据网格视图,并在组合的XY图表上一起绘制,每个案例都有一个系列。

目前,我使用不同的方法为每个人工作,但每个案例以及数据网格视图和图表都要求对数据库进行2次查询。

我的具体问题是,我是否可以在开始时为每个案例查询一次我需要的数据,并将其用于datagridview和图表系列。我将不得不根据用户输入做一些基本的数据操作,我想在查询之后但在数据网格视图和图表之前插入它。对数据库进行多次查询会使其更复杂一些。

的DataGridView

第一组代码在数据库中查询正确的Access表,并将整个事物传递给每个案例的DataTable,然后将DataGridView绑定到它:

Dim ds As New DataSet
Dim da As New OleDb.OleDbDataAdapter
Dim cmd As New OleDb.OleDbCommand("SELECT * FROM " & resultsLabel1.Text, resultsConn)
Dim baseTable As New DataTable
Dim comp1Table As New DataTable

resultsConn.Open()

If baseFlag = True Then
    Try
        cmd.CommandText = "SELECT * FROM " & resultsLabel1.Text 'Base Case table ID
        da.SelectCommand = cmd
        da.Fill(ds, "BaseResults")
        baseTable = ds.Tables("BaseResults")
        DataGridView2.DataSource = baseTable
    Catch ex As Exception
        MsgBox("Could not load Base Case data")
    End Try
    Else
        baseTable.Clear()
        DataGridView1.DataSource = baseTable
End If

If comp1Flag = True Then
    Try
        cmd.CommandText = "SELECT * FROM " & resultsLabel2.Text 'Comparison 2 table ID
        da.SelectCommand = cmd
        da.Fill(ds, "comp1Results")
        comp1Table = ds.Tables("Comp1Results")
        DataGridView2.DataSource = comp1Table
    Catch ex As Exception
        MsgBox("Could not load Comparison 1 data")
    End Try
    Else
        comp1Table.Clear()
        DataGridView2.DataSource = comp1Table
End If

resultsConn.Close()

排行榜

对于图表,查询特定字段(基于用户输入)的上述相同的Access表,然后传递到要绘制的相应图表系列。我希望能够从上面而不是数据库中查询数据表,但这是我无法弄清楚的:

If baseFlag = True Then
    Chart1.Series("Base Case").Points.Clear()
    Chart1.Series("Base Case").IsVisibleInLegend = True
    cmd = New OleDb.OleDbCommand("SELECT [" & xAxisComboBox.SelectedItem & "],[" & yAxisComboBox.SelectedItem & "] FROM " & resultsLabel1.Text, resultsConn)
    Dim dr1 As OleDb.OleDbDataReader = cmd.ExecuteReader
    While dr1.Read
        Chart1.Series("Base Case").Points.AddXY(dr1(xAxisComboBox.SelectedItem).ToString, dr1(yAxisComboBox.SelectedItem).ToString)
    End While
    dr1.Close()
    cmd.Dispose()
Else
    Chart1.Series("Base Case").IsVisibleInLegend = False
    Chart1.Series("Base Case").Points.Clear()
End If

If comp1Flag = True Then
    Chart1.Series("Comparison 1").Points.Clear()
    Chart1.Series("Comparison 1").IsVisibleInLegend = True
    cmd = New OleDb.OleDbCommand("SELECT [" & xAxisComboBox.SelectedItem & "],[" & yAxisComboBox.SelectedItem & "] " & resultsLabel2.Text, resultsConn)
    Dim dr2 As OleDb.OleDbDataReader = cmd.ExecuteReader
    While dr2.Read
        Chart1.Series("Comparison 1").Points.AddXY(dr2(xAxisComboBox.SelectedItem).ToString, dr2(yAxisComboBox.SelectedItem).ToString)
    End While
    dr2.Close()
    cmd.Dispose()
Else
    Chart1.Series("Comparison 1").IsVisibleInLegend = False
    Chart1.Series("Comparison 1").Points.Clear()
End If

摘要

希望到目前为止这一切都有道理。回到最初的问题,是否有办法将Access表读入自己的DataTables,操作我需要操作的字段,然后查询XY图表系列所需的列/字段?谢谢你的帮助。

0 个答案:

没有答案