Imports DevExpress.XtraCharts Public Class frmDiagrams Private Function Get_Splitter_Layout_Filename() As String Dim Filename As String = String.Format("{0}-Diagram-SplitterLayout.xml", CURRENT_FORM_ID) Return System.IO.Path.Combine(Application.UserAppDataPath(), Filename) End Function Private Function Get_Settings(settings As List(Of ClassSetting)) As List(Of ClassSetting) settings.Add(New ClassSetting("SplitterMainDistance", SplitContainerMain.SplitterDistance)) settings.Add(New ClassSetting("SplitterTopDistance", SplitContainerTop.SplitterDistance)) settings.Add(New ClassSetting("SplitterBottomDistance", SplitContainerBottom.SplitterDistance)) Return settings End Function Private Sub Load_Settings() Try ' Load Splitter Settings Dim XMLPath As String = Get_Splitter_Layout_Filename() Dim layout As New ClassLayout(XMLPath) Dim settings As List(Of ClassSetting) settings = layout.Load() ' No Settings found, save current values If settings.Count = 0 Then 'Adjust Width and Height of containers Dim containerW = Me.Width / 2 Dim containerH = Me.Height / 2 SplitContainerTop.SplitterDistance = containerW SplitContainerBottom.SplitterDistance = containerW SplitContainerMain.SplitterDistance = containerH settings = Get_Settings(settings) layout.Save(settings) End If 'Apply Settings For Each setting As ClassSetting In settings If setting._name = "SplitterMainDistance" Then SplitContainerMain.SplitterDistance = setting._value End If If setting._name = "SplitterTopDistance" Then SplitContainerTop.SplitterDistance = setting._value End If If setting._name = "SplitterBottomDistance" Then SplitContainerBottom.SplitterDistance = setting._value End If Next Catch ex As Exception MsgBox("Error while loading Settings for frmDiagrams: " & vbNewLine & ex.Message) End Try End Sub Private Sub Configure_Split_Containers(VisibleContainers As Integer) Select Case VisibleContainers Case 0 MsgBox("No Diagrams found") Case 1 ' Show only ChartTopLeft SplitContainerTop.Panel2Collapsed = True ' Collapse SplitContainerBottom SplitContainerMain.Panel2Collapsed = True Case 2 ' Collapse SplitContainerBottom SplitContainerMain.Panel2Collapsed = True Case 3 ' Collapse ChartBottomRight SplitContainerBottom.Panel2Collapsed = True ' Show SplitContainerBottom SplitContainerMain.Panel2Collapsed = False Case 4 ' Show SplitContainerBottom SplitContainerMain.Panel2Collapsed = False End Select End Sub Private Sub frmDiagrams_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing Dim XMLPath As String = Get_Splitter_Layout_Filename() Dim layout As New ClassLayout(XMLPath) Dim settings As New List(Of ClassSetting) settings = Get_Settings(settings) layout.Save(settings) End Sub Private Function Create_Series(title As String, type As String) As Series Dim series As Series Select Case type Case "BAR" series = New Series(title, ViewType.Bar) Case "LINE" series = New Series(title, ViewType.Line) Case "AREA" series = New Series(title, ViewType.Area) Case "PIE" series = New Series(title, ViewType.Pie) series.Label.TextPattern = "{A}: {VP:p0}" Dim view As PieSeriesView = DirectCast(series.View, PieSeriesView) view.Titles.Add(New SeriesTitle()) view.Titles(0).Text = title Case Else series = New Series(title, ViewType.Bar) End Select Return series End Function Private Function Select_Chart(index As Integer) Select Case index Case 0 Return ChartTopLeft Case 1 Return ChartTopRight Case 2 Return ChartBottomLeft Case Else Return ChartBottomRight End Select End Function Private Sub frmDiagrams_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim CHART_ENTITY_SQL, CHART_GROUPS_SQL As String Dim CHART_ENTITY_DT, CHART_GROUPS_DT As DataTable CHART_ENTITY_SQL = String.Format("SELECT * FROM TBPMO_CHART_ENTITY WHERE ENTITY_ID = {0}", CURRENT_FORM_ID) CHART_GROUPS_SQL = String.Format("SELECT DISTINCT GROUP_ID FROM TBPMO_CHART_ENTITY WHERE ENTITY_ID = {0} ORDER BY GROUP_ID", CURRENT_FORM_ID) CHART_ENTITY_DT = ClassDatabase.Return_Datatable(CHART_ENTITY_SQL) CHART_GROUPS_DT = ClassDatabase.Return_Datatable(CHART_GROUPS_SQL) Dim Groups As DataRowCollection = CHART_GROUPS_DT.Rows Dim GroupCount As Integer = Groups.Count Load_Settings() Configure_Split_Containers(GroupCount) If GroupCount > 1 Then For Each gRow As DataRow In Groups Dim groupIndex As Integer = Groups.IndexOf(gRow) Dim groupName As String = gRow.Item("GROUP_ID") Dim groupCharts = CHART_ENTITY_DT.Select(String.Format("GROUP_ID = '{0}'", groupName)) Dim chart As ChartControl For Each cRow As DataRow In groupCharts Dim type = cRow.Item("TYPE_CHART") Dim title = cRow.Item("TITLE") Dim guid = cRow.Item("GUID") Dim value = cRow.Item("VALUE") Dim argument = cRow.Item("ARGUMENT") Dim sql = cRow.Item("SQL_COMMAND") Dim DATA_DT As DataTable = ClassDatabase.Return_Datatable(sql) Dim series As Series = Create_Series(title, type) ' Select Current Chart chart = Select_Chart(groupIndex) ' Set DataSource chart.DataSource = DATA_DT ' Set shown Columns for Chart series.ArgumentDataMember = argument series.ValueDataMembers.AddRange(New String() {value}) 'set some options chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True ' Show Data chart.Series.Add(series) Next ' End Charts Next 'End Groups Else ' Create Charts For Each row As DataRow In CHART_ENTITY_DT.Rows Dim chart As ChartControl Dim chartIndex As Integer = CHART_ENTITY_DT.Rows.IndexOf(row) Dim type = row.Item("TYPE_CHART") Dim title = row.Item("TITLE") Dim guid = row.Item("GUID") Dim value = row.Item("VALUE") Dim argument = row.Item("ARGUMENT") Dim sql = row.Item("SQL_COMMAND") Dim DATA_DT As DataTable = ClassDatabase.Return_Datatable(sql) ' Create Series based on type Dim series As Series = Create_Series(title, type) ' Select Current Chart chart = Select_Chart(chartIndex) ' Set DataSource chart.DataSource = DATA_DT ' Set shown Columns for Chart series.ArgumentDataMember = argument series.ValueDataMembers.AddRange(New String() {value}) 'set some options chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True ' Show Data chart.Series.Add(series) Next End If End Sub End Class