Hallo!
Irgend so etwas .....
Aus Demodaten wird eine Häufigkeitstabelle (Monate) erstellt.
Die Spalten der Tabelle (done, todo) werden als Datenserien
für den Chart verwendet (Datenbindung).
Imports System.Windows.Forms.DataVisualization.Charting
Public Class frmMonthChart
Dim dt As New DataTable
Dim cht As New Chart With _
{.Parent = Me, .Size = New Size(500, 500)}
Private Sub frmMonthChart_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.Size = New Size(520, 560)
'Demo-Datensätze erzeugen
With dt.Columns
.Add("Date", GetType(Date))
.Add("done", GetType(Boolean))
End With
Dim dx As Date, erl As Boolean
Dim rndm As New Random(4321)
For i As Integer = 1 To 1000
With rndm
dx = _
New Date(.Next(2015, 2018), .Next(1, 13), .Next(1, 29))
End With
erl = (i Mod 2 = 0)
dt.Rows.Add({dx, erl})
Next i
'Häufigkeitstabelle aus Demo-Datensätzen erstellen
Dim dc As New DataTable
With dc.Columns
.Add("Month", GetType(String))
.Add("Freq. done", GetType(Integer))
.Add("Freq. todo", GetType(Integer))
End With
dc.PrimaryKey = {dc.Columns("Month")}
For i As Integer = 0 To dt.Rows.Count - 1
Dim dr As DataRow = dt.Rows(i)
'sortierbarer Jahr-Monat-String
Dim ym As String = _
dr.Field(Of Date)("Date").Year.ToString & "-" & _
dr.Field(Of Date)("Date").Month.ToString("00")
Dim el As Boolean = dr.Field(Of Boolean)("done")
'Datensatzsuche nach Monat in Häufigkeitstabelle
'gemäß Primärschlüssel
Dim dcr As DataRow = dc.Rows.Find({ym})
If dcr Is Nothing Then
dcr = dc.Rows.Add({ym, 0, 0})
End If
Dim fcol As String
If el Then
fcol = dc.Columns(1).ColumnName
Else
fcol = dc.Columns(2).ColumnName
End If
'Häufigkeit bestimmen
dcr(fcol) = CInt(dcr(fcol)) + 1
Next i
Dim bs As New BindingSource With {.DataSource = dc}
bs.Sort = "Month ASC"
'Chart für Häufigkeiten erstellen
With cht
.DataSource = bs
.ChartAreas.Add("Base")
With .ChartAreas("Base").AxisX
.LabelStyle.Angle = 45
.MajorTickMark.Interval = 1
.LabelStyle.Interval = 3
End With
.Series.Add("Month-done")
With .Series("Month-done")
.XValueMember = "Month"
.YValueMembers = dc.Columns(1).ColumnName
.ChartType = SeriesChartType.StackedColumn
.ChartArea = "Base"
End With
.Series.Add("Month-todo")
With .Series("Month-todo")
.XValueMember = "Month"
.ChartType = SeriesChartType.StackedColumn
.YValueMembers = dc.Columns(2).ColumnName
.ChartArea = "Base"
End With
End With
End Sub
End Class
Beitrag wurde zuletzt am 17.04.17 um 22:54:36 editiert. |