Chart-Integration
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
Imports System.Runtime.CompilerServices
|
||||
Imports System.Text.RegularExpressions
|
||||
Imports System.Text.RegularExpressions
|
||||
Imports DevExpress.Utils
|
||||
Imports DevExpress.XtraEditors.Controls
|
||||
Imports DevExpress.XtraEditors.Repository
|
||||
@@ -11,6 +10,7 @@ Imports DevExpress.XtraTab
|
||||
Imports DevExpress.XtraTreeList
|
||||
Imports DevExpress.XtraTreeList.Columns
|
||||
Imports DevExpress.XtraTreeList.Nodes
|
||||
Imports DevExpress.XtraCharts
|
||||
Imports DigitalData.Controls.DocumentViewer
|
||||
Imports DigitalData.GUIs.Common
|
||||
Imports DigitalData.GUIs.Monitor.Constants
|
||||
@@ -20,6 +20,8 @@ Imports DigitalData.Modules.Language
|
||||
Imports DigitalData.Modules.Language.Utils
|
||||
Imports DigitalData.Modules.Logging
|
||||
Imports DigitalData.Modules.Patterns
|
||||
Imports DevExpress.XtraEditors
|
||||
|
||||
|
||||
Public Class frmMonitor
|
||||
Private ReadOnly InvisibleColumnMarkers As New List(Of String) From {"[HTML]", "[SQL]", "[FILENAME]"}
|
||||
@@ -57,6 +59,8 @@ Public Class frmMonitor
|
||||
Private GridControlResults As GridControl
|
||||
Private GridViewResults As GridView
|
||||
|
||||
Private ChartViewResultContainer As SplitContainerControl
|
||||
|
||||
Private InvisibleMarkedColumns As New List(Of GridColumn)
|
||||
Private VisibleMarkedColumns As New List(Of GridColumn)
|
||||
Private ActiveSearch As Search = Nothing
|
||||
@@ -123,6 +127,8 @@ Public Class frmMonitor
|
||||
|
||||
InitGrid()
|
||||
InitTreeList()
|
||||
'InitChartView()
|
||||
InitChartContainer()
|
||||
|
||||
Dim oGrids As GridView() = New List(Of GridView) From {GridView1, GridView2, GridView3, GridView4}.ToArray
|
||||
GridBuilder.SetDefaults(oGrids)
|
||||
@@ -154,7 +160,6 @@ Public Class frmMonitor
|
||||
End Sub
|
||||
Next
|
||||
|
||||
|
||||
For Each oViewer As DocumentViewer In FileResultViewers
|
||||
oViewer.Init(LogConfig, oLicense)
|
||||
Next
|
||||
@@ -164,7 +169,6 @@ Public Class frmMonitor
|
||||
SetResultCount(0)
|
||||
SetVersion()
|
||||
|
||||
|
||||
Catch ex As Exception
|
||||
FormHelper.ShowErrorMessage(ex, "frmStart_Load")
|
||||
End Try
|
||||
@@ -210,16 +214,23 @@ Public Class frmMonitor
|
||||
End If
|
||||
|
||||
Dim oControls As List(Of Control) = LayoutControl1.Controls.Cast(Of Control).ToList()
|
||||
Dim oSQL = Patterns.ReplaceControlValues(oSearch.SQLCommand, oControls)
|
||||
Dim oTable As DataTable = Await Database.GetDatatableAsync(oSQL)
|
||||
Dim oSQL As String
|
||||
Dim oTable As DataTable
|
||||
|
||||
If oSearch.SQLCommand.Length > 0 Then
|
||||
oSQL = Patterns.ReplaceControlValues(oSearch.SQLCommand, oControls)
|
||||
oTable = Await Database.GetDatatableAsync(oSQL)
|
||||
End If
|
||||
|
||||
Dim oStartTime = Now
|
||||
|
||||
If oSearch.ReturnType = Constants.ReturnTypeEnum.TreeView Then
|
||||
GridControlResults.Visible = False
|
||||
GridControlResults.Dock = DockStyle.None
|
||||
If oSearch.ReturnType = ReturnTypeEnum.TreeView Then
|
||||
' Baum
|
||||
SetResultVisbility(ReturnTypeEnum.TreeView)
|
||||
|
||||
TreeListResults.Visible = True
|
||||
TreeListResults.Dock = DockStyle.Fill
|
||||
If oTable Is Nothing Then
|
||||
Return False
|
||||
End If
|
||||
|
||||
TreeListResults.DataSource = oTable
|
||||
|
||||
@@ -258,12 +269,70 @@ Public Class frmMonitor
|
||||
SetResultCount(TreeListResults.AllNodesCount)
|
||||
|
||||
TreeListResults.Focus()
|
||||
Else
|
||||
GridControlResults.Visible = True
|
||||
GridControlResults.Dock = DockStyle.Fill
|
||||
ElseIf oSearch.ReturnType = Constants.ReturnTypeEnum.ChartView Then
|
||||
' Charts
|
||||
SetResultVisbility(ReturnTypeEnum.ChartView)
|
||||
|
||||
TreeListResults.Visible = False
|
||||
TreeListResults.Dock = DockStyle.None
|
||||
' Oberer SplitContainer
|
||||
Dim splitContainer1 As SplitContainerControl = CType(ChartViewResultContainer.Panel1.Controls(0), SplitContainerControl)
|
||||
' Unterer SplitContainer
|
||||
Dim splitContainer2 As SplitContainerControl = CType(ChartViewResultContainer.Panel2.Controls(0), SplitContainerControl)
|
||||
|
||||
ChartViewResultContainer.PanelVisibility = SplitPanelVisibility.Both
|
||||
splitContainer1.PanelVisibility = SplitPanelVisibility.Both
|
||||
splitContainer2.PanelVisibility = SplitPanelVisibility.Both
|
||||
|
||||
Dim chartArray(4) As ChartControl
|
||||
' TopLeft
|
||||
chartArray(0) = CType(splitContainer1.Panel1.Controls(0), ChartControl)
|
||||
' TopRight
|
||||
chartArray(1) = CType(splitContainer1.Panel2.Controls(0), ChartControl)
|
||||
' BottomLeft
|
||||
chartArray(2) = CType(splitContainer2.Panel1.Controls(0), ChartControl)
|
||||
' BottomRight
|
||||
chartArray(3) = CType(splitContainer2.Panel2.Controls(0), ChartControl)
|
||||
|
||||
For i As Integer = 0 To 3
|
||||
chartArray(i).Titles.Clear()
|
||||
chartArray(i).Series.Clear()
|
||||
Next
|
||||
ResizeCharContainer()
|
||||
|
||||
Dim oChartParameters As List(Of ChartParameter)
|
||||
oChartParameters = SearchLoader.ChartParameters.Where(Function(p) p.SearchId = oSearch.Id And p.ChartType <> ChartTypeEnum.Undefined).ToList()
|
||||
|
||||
For Each oChartParameterSet In oChartParameters
|
||||
Dim ChartViewResults As ChartControl
|
||||
|
||||
Select Case oChartParameterSet.ChartPos
|
||||
Case ChartPosEnum.TopLeft
|
||||
ChartViewResults = chartArray(0)
|
||||
Case ChartPosEnum.TopRight
|
||||
ChartViewResults = chartArray(1)
|
||||
Case ChartPosEnum.BottomLeft
|
||||
ChartViewResults = chartArray(2)
|
||||
Case ChartPosEnum.BottomRight
|
||||
ChartViewResults = chartArray(3)
|
||||
Case Else
|
||||
ChartViewResults = chartArray(0)
|
||||
End Select
|
||||
|
||||
SetChartTitle(ChartViewResults, oChartParameterSet.Title)
|
||||
Dim oSerie As Series = Await GetChartSerie(oChartParameterSet, oControls)
|
||||
ChartViewResults.Series.Add(oSerie)
|
||||
Next
|
||||
|
||||
SetPanelVisibility(chartArray)
|
||||
|
||||
ChartViewResultContainer.Focus()
|
||||
|
||||
Else
|
||||
' Tabelle
|
||||
SetResultVisbility(ReturnTypeEnum.Table)
|
||||
|
||||
If oTable Is Nothing Then
|
||||
Return False
|
||||
End If
|
||||
|
||||
GridControlResults.DataSource = oTable
|
||||
GridViewResults.PopulateColumns()
|
||||
@@ -343,6 +412,133 @@ Public Class frmMonitor
|
||||
SplashScreenManager1.CloseWaitForm()
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Private Async Function GetChartSerie(pChartParameters As ChartParameter, pControls As List(Of Control)) As Threading.Tasks.Task(Of Series)
|
||||
Dim oSerie As Series
|
||||
|
||||
Select Case pChartParameters.ChartType
|
||||
Case ChartTypeEnum.Bar
|
||||
oSerie = New Series(pChartParameters.Title, ViewType.Bar)
|
||||
Case ChartTypeEnum.Line
|
||||
oSerie = New Series(pChartParameters.Title, ViewType.Line)
|
||||
Case ChartTypeEnum.Area
|
||||
oSerie = New Series(pChartParameters.Title, ViewType.Area)
|
||||
Case ChartTypeEnum.Pie
|
||||
oSerie = New Series(pChartParameters.Title, ViewType.Pie)
|
||||
oSerie.Label.TextPattern = "{V}"
|
||||
oSerie.LegendTextPattern = "{A}"
|
||||
Case Else
|
||||
Return Nothing
|
||||
End Select
|
||||
|
||||
Dim oSQL As String = Patterns.ReplaceControlValues(pChartParameters.SQLCommand, pControls)
|
||||
Dim oTable As DataTable = Await Database.GetDatatableAsync(oSQL)
|
||||
|
||||
Dim xAxisTitle As String = pChartParameters.Argument
|
||||
Dim yAxisTitle As String = pChartParameters.Value
|
||||
|
||||
For Each oRow In oTable.Rows
|
||||
Dim value1 As String = oRow.Item(xAxisTitle)
|
||||
Dim value2 As String = oRow.Item(yAxisTitle)
|
||||
oSerie.Points.Add(New SeriesPoint(value1, value2))
|
||||
Next
|
||||
|
||||
oSerie.ArgumentScaleType = ScaleType.Qualitative
|
||||
|
||||
Return oSerie
|
||||
|
||||
End Function
|
||||
|
||||
Private Sub SetChartTitle(pChartView As ChartControl, pTitle As String)
|
||||
' Wenn bereits ein Titel vorhanden ist, wird kein neuer ergänzt
|
||||
' relevant bei mehrere Charts in einem ChartControl
|
||||
If pChartView.Titles.Count = 0 Then
|
||||
Dim oTitle As ChartTitle = New ChartTitle()
|
||||
oTitle.Text = pTitle
|
||||
pChartView.Titles.Add(oTitle)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub SetPanelVisibility(chartArray() As ChartControl)
|
||||
If chartArray.Length < 4 Then
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Dim showTop As Boolean = True
|
||||
Dim showBottom As Boolean = True
|
||||
|
||||
If chartArray(0).Titles.Count = 0 And chartArray(1).Titles.Count = 0 Then
|
||||
showTop = False
|
||||
End If
|
||||
|
||||
If chartArray(2).Titles.Count = 0 And chartArray(3).Titles.Count = 0 Then
|
||||
showBottom = False
|
||||
End If
|
||||
|
||||
If showBottom = False Then
|
||||
ChartViewResultContainer.PanelVisibility = SplitPanelVisibility.Panel1
|
||||
ElseIf showTop = False Then
|
||||
ChartViewResultContainer.PanelVisibility = SplitPanelVisibility.Panel2
|
||||
End If
|
||||
|
||||
If showTop = True Then
|
||||
Dim showLeft As Boolean = chartArray(0).Titles.Count > 0
|
||||
Dim showRight As Boolean = chartArray(1).Titles.Count > 0
|
||||
|
||||
Dim splitContainer1 As SplitContainerControl = CType(ChartViewResultContainer.Panel1.Controls(0), SplitContainerControl)
|
||||
|
||||
If showRight = False Then
|
||||
splitContainer1.PanelVisibility = SplitPanelVisibility.Panel1
|
||||
ElseIf showLeft = False Then
|
||||
splitContainer1.PanelVisibility = SplitPanelVisibility.Panel2
|
||||
End If
|
||||
End If
|
||||
|
||||
If showBottom = True Then
|
||||
Dim showLeft As Boolean = chartArray(2).Titles.Count > 0
|
||||
Dim showRight As Boolean = chartArray(3).Titles.Count > 0
|
||||
|
||||
Dim splitContainer2 As SplitContainerControl = CType(ChartViewResultContainer.Panel2.Controls(0), SplitContainerControl)
|
||||
|
||||
If showRight = False Then
|
||||
splitContainer2.PanelVisibility = SplitPanelVisibility.Panel1
|
||||
ElseIf showLeft = False Then
|
||||
splitContainer2.PanelVisibility = SplitPanelVisibility.Panel2
|
||||
End If
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
Private Sub SetResultVisbility(pSearchMode As ReturnTypeEnum)
|
||||
Select Case pSearchMode
|
||||
Case ReturnTypeEnum.TreeView
|
||||
GridControlResults.Visible = False
|
||||
GridControlResults.Dock = DockStyle.None
|
||||
TreeListResults.Visible = True
|
||||
TreeListResults.Dock = DockStyle.Fill
|
||||
ChartViewResultContainer.Visible = False
|
||||
ChartViewResultContainer.Dock = DockStyle.None
|
||||
|
||||
Case ReturnTypeEnum.ChartView
|
||||
GridControlResults.Visible = False
|
||||
GridControlResults.Dock = DockStyle.None
|
||||
TreeListResults.Visible = False
|
||||
TreeListResults.Dock = DockStyle.None
|
||||
ChartViewResultContainer.Visible = True
|
||||
ChartViewResultContainer.Dock = DockStyle.Fill
|
||||
|
||||
Case ReturnTypeEnum.Table
|
||||
GridControlResults.Visible = True
|
||||
GridControlResults.Dock = DockStyle.Fill
|
||||
TreeListResults.Visible = False
|
||||
TreeListResults.Dock = DockStyle.None
|
||||
ChartViewResultContainer.Visible = False
|
||||
ChartViewResultContainer.Dock = DockStyle.None
|
||||
End Select
|
||||
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' Linklogik für Hyperlink-Spalten
|
||||
''' </summary>
|
||||
@@ -391,7 +587,7 @@ Public Class frmMonitor
|
||||
Private Sub SetColumnsToDisAllowEditInGridViewResults()
|
||||
For Each oColumn As GridColumn In GridViewResults.Columns
|
||||
|
||||
If Not TypeOf oColumn.ColumnEdit Is RepositoryItemHyperLinkEdit Then
|
||||
If TypeOf oColumn.ColumnEdit IsNot RepositoryItemHyperLinkEdit Then
|
||||
' Verbietet Spaltenweise die Bearbeitung
|
||||
oColumn.OptionsColumn.AllowEdit = False
|
||||
End If
|
||||
@@ -419,6 +615,7 @@ Public Class frmMonitor
|
||||
Private Sub LoadSearches()
|
||||
Try
|
||||
SearchLoader.LoadSearchParameters()
|
||||
SearchLoader.LoadChartParameters()
|
||||
SearchLoader.LoadSearches()
|
||||
|
||||
cmbSearches.Properties.Items.Clear()
|
||||
@@ -999,6 +1196,23 @@ Public Class frmMonitor
|
||||
SplitContainerSQL.Panel1.Controls.Add(TreeListResults)
|
||||
End Sub
|
||||
|
||||
Private Sub InitChartContainer()
|
||||
ChartViewResultContainer = GridLoader.InitChartViewResultContainer()
|
||||
|
||||
SplitContainerSQL.Panel1.Controls.Add(ChartViewResultContainer)
|
||||
End Sub
|
||||
|
||||
Private Sub ResizeCharContainer()
|
||||
If ChartViewResultContainer.Visible = True Then
|
||||
Dim splitContainer1 As SplitContainerControl = CType(ChartViewResultContainer.Panel1.Controls(0), SplitContainerControl)
|
||||
Dim splitContainer2 As SplitContainerControl = CType(ChartViewResultContainer.Panel2.Controls(0), SplitContainerControl)
|
||||
|
||||
ChartViewResultContainer.SplitterPosition = ChartViewResultContainer.Height / 2
|
||||
splitContainer1.SplitterPosition = splitContainer1.Width / 2
|
||||
splitContainer2.SplitterPosition = splitContainer2.Width / 2
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub BarButtonItem2_ItemClick_1(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem2.ItemClick
|
||||
If ActiveSearch Is Nothing Then
|
||||
Exit Sub
|
||||
@@ -1014,5 +1228,6 @@ Public Class frmMonitor
|
||||
FormHelper.ShowErrorMessage(ex, "Log Verzeichnis öffnen")
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
|
||||
|
||||
Reference in New Issue
Block a user