VB.Net Chart Control - Могу ли я привязать данные к различным сериям из разных таблиц в моем наборе данных? - PullRequest
0 голосов
/ 01 декабря 2011

Я думаю, что мой предмет суммирует то, что мне интересно знать.Я пытаюсь создать диаграмму, в которой Series1 - из Таблицы 1, Series2 - из Таблицы 2 в данном наборе данных.

Мой код, приведенный ниже, не выдает никаких ошибок, но, похоже, он собирает данные для каждой серии изпервая таблица.

    Imports System.Windows.Forms.DataVisualization.Charting
    Public Class Form1
    Public Sub New(ByVal ChartData As DataSet)
    ' This call is required by the designer.
    InitializeComponent()
    ' Add any initialization after the InitializeComponent() call.
    Dim ChartArea1 As ChartArea = New ChartArea()
    Dim Legend1 As Legend = New Legend()
    Dim DataSeries(ChartData.Tables.Count - 1) As Series
    Dim Chart1 = New Chart()
    Me.Controls.Add(Chart1)

    Chart1.ChartAreas.Add(ChartArea1)
    Chart1.Legends.Add(Legend1)

    Chart1.DataSource = ChartData

    For index As UShort = 0 To ChartData.Tables.Count - 1
        DataSeries(index) = New Series()
        DataSeries(index).Name = ChartData.Tables(index).TableName
        Chart1.Series.Add(DataSeries(index))

        Chart1.Series(index).XValueMember = ChartData.Tables(index).Columns(0).ColumnName
        Chart1.Series(index).YValueMembers = ChartData.Tables(index).Columns(1).ColumnName
    Next

    Chart1.Dock = DockStyle.Fill
    Chart1.TabIndex = 0


    End Sub
    End Class

Редактировать: По-видимому, я могу получить ожидаемые результаты, перебирая и устанавливая точки из данных ... но такой подход не будет быстрым для больших наборов данных,Есть ли лучший способ сделать это?

    Imports System.Windows.Forms.DataVisualization.Charting
    Public Class Form1

    Public Sub New(ByVal ChartData As DataSet)
    ' This call is required by the designer.
    InitializeComponent()
    ' Add any initialization after the InitializeComponent() call.
    Dim ChartArea1 As ChartArea = New ChartArea()
    Dim Legend1 As Legend = New Legend()
    Dim DataSeries(ChartData.Tables.Count - 1) As Series
    Dim Chart1 = New Chart()
    Me.Controls.Add(Chart1)

    Chart1.ChartAreas.Add(ChartArea1)
    Chart1.Legends.Add(Legend1)

    For index As UShort = 0 To ChartData.Tables.Count - 1
        DataSeries(index) = New Series()
        DataSeries(index).Name = ChartData.Tables(index).TableName
        Chart1.Series.Add(DataSeries(index).Name)

        For RowIndex As UShort = 0 To ChartData.Tables(index).Rows.Count - 1
                    Chart1.Series(DataSeries(index).Name).Points.AddXY(ChartData.Tables(index).Rows(RowIndex).Item(0), ChartData.Tables(index).Rows(RowIndex).Item(1))
                Next
            Next

            Chart1.Dock = DockStyle.Fill
            Chart1.TabIndex = 0

        End Sub
    End Class

1 Ответ

1 голос
/ 15 февраля 2012

Показать ответ на этот вопрос.Видимо, вы должны добавить точки данных вручную.

Imports System.Windows.Forms.DataVisualization.Charting
Public Class Form1

Public Sub New(ByVal ChartData As DataSet)
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Dim ChartArea1 As ChartArea = New ChartArea()
Dim Legend1 As Legend = New Legend()
Dim DataSeries(ChartData.Tables.Count - 1) As Series
Dim Chart1 = New Chart()
Me.Controls.Add(Chart1)

Chart1.ChartAreas.Add(ChartArea1)
Chart1.Legends.Add(Legend1)

For index As UShort = 0 To ChartData.Tables.Count - 1
    DataSeries(index) = New Series()
    DataSeries(index).Name = ChartData.Tables(index).TableName
    Chart1.Series.Add(DataSeries(index).Name)

    For RowIndex As UShort = 0 To ChartData.Tables(index).Rows.Count - 1
                Chart1.Series(DataSeries(index).Name).Points.AddXY(ChartData.Tables(index).Rows(RowIndex).Item(0), ChartData.Tables(index).Rows(RowIndex).Item(1))
            Next
        Next

        Chart1.Dock = DockStyle.Fill
        Chart1.TabIndex = 0

    End Sub
End Class
...