Anzeige von Labels, Chart-Typ: StackedBar, Dateinamen für Chart-Export

This commit is contained in:
PitzM 2023-04-17 14:47:51 +02:00
parent e735a061d8
commit e8e30e8f62
5 changed files with 96 additions and 26 deletions

View File

@ -50,6 +50,12 @@
Line Line
Area Area
Pie Pie
StackedBar
End Enum
Public Enum LabelTypeEnum
NoLabels
DefaultLabels
End Enum End Enum
End Namespace End Namespace

View File

@ -7,6 +7,7 @@
Public Argument As String Public Argument As String
Public Value As String Public Value As String
Public SearchId As Integer Public SearchId As Integer
Public LabelType As Constants.LabelTypeEnum
Public Overrides Function ToString() As String Public Overrides Function ToString() As String
Return Title Return Title

View File

@ -24,8 +24,7 @@ Imports DevExpress.XtraEditors
Imports System.Drawing.Imaging Imports System.Drawing.Imaging
Imports System.IO Imports System.IO
Imports DevExpress.XtraBars Imports DevExpress.XtraBars
Imports DevExpress.Utils.CommonDialogs
Imports System.Windows.Forms.VisualStyles
Public Class frmMonitor Public Class frmMonitor
Private ReadOnly InvisibleColumnMarkers As New List(Of String) From {"[HTML]", "[SQL]", "[FILENAME]"} Private ReadOnly InvisibleColumnMarkers As New List(Of String) From {"[HTML]", "[SQL]", "[FILENAME]"}
@ -54,7 +53,7 @@ Public Class frmMonitor
Private FileResultViewers As List(Of DocumentViewer) Private FileResultViewers As List(Of DocumentViewer)
Private FileResultTabs As List(Of XtraTabPage) Private FileResultTabs As List(Of XtraTabPage)
Private FileResultViewerIndex As Integer = 0 'Private FileResultViewerIndex As Integer = 0
Private HtmlResultViewers As List(Of RichEditControl) Private HtmlResultViewers As List(Of RichEditControl)
Private HtmlResultTabs As List(Of XtraTabPage) Private HtmlResultTabs As List(Of XtraTabPage)
@ -184,7 +183,7 @@ Public Class frmMonitor
Private Function LoadGDPicture() As String Private Function LoadGDPicture() As String
Dim oSQL = "SELECT LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE NAME = 'GDPICTURE'" Dim oSQL = "SELECT LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE NAME = 'GDPICTURE'"
Return Database.GetScalarValue(oSQL) Return CStr(Database.GetScalarValue(oSQL))
End Function End Function
@ -203,7 +202,7 @@ Public Class frmMonitor
Return False Return False
End If End If
Dim oSearch As Search = cmbSearches.EditValue Dim oSearch As Search = CType(cmbSearches.EditValue, Search)
InvisibleMarkedColumns.Clear() InvisibleMarkedColumns.Clear()
VisibleMarkedColumns.Clear() VisibleMarkedColumns.Clear()
@ -223,7 +222,7 @@ Public Class frmMonitor
Dim oControls As List(Of Control) = LayoutControl1.Controls.Cast(Of Control).ToList() Dim oControls As List(Of Control) = LayoutControl1.Controls.Cast(Of Control).ToList()
Dim oSQL As String Dim oSQL As String
Dim oTable As DataTable Dim oTable As DataTable = Nothing
If oSearch.SQLCommand.Length > 0 Then If oSearch.SQLCommand.Length > 0 Then
oSQL = Patterns.ReplaceControlValues(oSearch.SQLCommand, oControls) oSQL = Patterns.ReplaceControlValues(oSearch.SQLCommand, oControls)
@ -442,13 +441,17 @@ Public Class frmMonitor
Case ChartTypeEnum.Area Case ChartTypeEnum.Area
oSerie = New Series(pChartParameters.Title, ViewType.Area) oSerie = New Series(pChartParameters.Title, ViewType.Area)
Case ChartTypeEnum.Pie Case ChartTypeEnum.Pie
oSerie = New Series(pChartParameters.Title, ViewType.Pie) oSerie = New Series(pChartParameters.Title, ViewType.Pie) With {
oSerie.Label.TextPattern = "{V}" .LegendTextPattern = "{A}"
oSerie.LegendTextPattern = "{A}" }
Case ChartTypeEnum.StackedBar
oSerie = New Series(pChartParameters.Title, ViewType.StackedBar)
Case Else Case Else
Return Nothing Return Nothing
End Select End Select
SetSerieLabels(oSerie, pChartParameters.ChartType, pChartParameters.LabelType)
Dim oSQL As String = Patterns.ReplaceControlValues(pChartParameters.SQLCommand, pControls) Dim oSQL As String = Patterns.ReplaceControlValues(pChartParameters.SQLCommand, pControls)
Logger.Debug($"SQL after replacing placeholder: [{0}]", oSQL) Logger.Debug($"SQL after replacing placeholder: [{0}]", oSQL)
Dim oTable As DataTable = Await Database.GetDatatableAsync(oSQL) Dim oTable As DataTable = Await Database.GetDatatableAsync(oSQL)
@ -457,8 +460,8 @@ Public Class frmMonitor
Dim yAxisTitle As String = pChartParameters.Value Dim yAxisTitle As String = pChartParameters.Value
For Each oRow In oTable.Rows For Each oRow In oTable.Rows
Dim value1 As String = oRow.Item(xAxisTitle) Dim value1 As String = CStr(oRow.Item(xAxisTitle))
Dim value2 As String = oRow.Item(yAxisTitle) Dim value2 As String = CStr(oRow.Item(yAxisTitle))
oSerie.Points.Add(New SeriesPoint(value1, value2)) oSerie.Points.Add(New SeriesPoint(value1, value2))
Next Next
@ -468,11 +471,53 @@ Public Class frmMonitor
End Function End Function
Private Sub SetSerieLabels(pSerie As Series, pChartType As ChartTypeEnum, pLabelType As LabelTypeEnum)
If (pLabelType = LabelTypeEnum.NoLabels) Then
pSerie.LabelsVisibility = DefaultBoolean.False
Exit Sub
End If
pSerie.LabelsVisibility = DefaultBoolean.True
pSerie.Label.TextPattern = "{V}"
Select Case pChartType
Case ChartTypeEnum.Bar
Dim barLabel As SideBySideBarSeriesLabel = TryCast(pSerie.Label, SideBySideBarSeriesLabel)
If barLabel IsNot Nothing Then
barLabel.Position = BarSeriesLabelPosition.Top
End If
Case ChartTypeEnum.Line
Dim lineLabel As PointSeriesLabel = TryCast(pSerie.Label, PointSeriesLabel)
If lineLabel IsNot Nothing Then
lineLabel.Position = PointLabelPosition.Outside
End If
Case ChartTypeEnum.Area
Dim areaLabel As PointSeriesLabel = TryCast(pSerie.Label, PointSeriesLabel)
If areaLabel IsNot Nothing Then
areaLabel.Position = PointLabelPosition.Outside
End If
Case ChartTypeEnum.Pie
Dim pieLabel As PieSeriesLabel = TryCast(pSerie.Label, PieSeriesLabel)
If pieLabel IsNot Nothing Then
pieLabel.Position = PieSeriesLabelPosition.Outside
End If
Case ChartTypeEnum.StackedBar
Dim stackedBarLabel As StackedBarSeriesLabel = TryCast(pSerie.Label, StackedBarSeriesLabel)
If stackedBarLabel IsNot Nothing Then
stackedBarLabel.Position = BarSeriesLabelPosition.Auto
End If
Case Else
End Select
End Sub
Private Sub SetChartTitle(pChartView As ChartControl, pTitle As String) Private Sub SetChartTitle(pChartView As ChartControl, pTitle As String)
' Wenn bereits ein Titel vorhanden ist, wird kein neuer ergänzt ' Wenn bereits ein Titel vorhanden ist, wird kein neuer ergänzt
' relevant bei mehrere Charts in einem ChartControl ' relevant bei mehrere Charts in einem ChartControl
If pChartView.Titles.Count = 0 Then If pChartView.Titles.Count = 0 Then
Dim oTitle As ChartTitle = New ChartTitle With { Dim oTitle As New ChartTitle With {
.Text = pTitle .Text = pTitle
} }
pChartView.Titles.Add(oTitle) pChartView.Titles.Add(oTitle)
@ -619,7 +664,7 @@ Public Class frmMonitor
Return Return
Else Else
Dim oControl As Control = LayoutControl1.Controls.Find(oSearchParameter.PatternTitle, True).FirstOrDefault() Dim oControl As Control = LayoutControl1.Controls.Find(oSearchParameter.PatternTitle, True).FirstOrDefault()
oControl.Text = e.EditValue oControl.Text = CStr(e.EditValue)
End If End If
Await LoadData() Await LoadData()
@ -663,7 +708,7 @@ Public Class frmMonitor
Exit Sub Exit Sub
End If End If
If pRootNode.Item("PARENT_ID") = 0 Then If CType(pRootNode.Item("PARENT_ID"), Int32) = 0 Then
' Auswertung für Parent-Knoten ' Auswertung für Parent-Knoten
ExpandCollapseNode(pRootNode) ExpandCollapseNode(pRootNode)
End If End If
@ -738,6 +783,7 @@ Public Class frmMonitor
AdornerUIManager2.Hide() AdornerUIManager2.Hide()
AdornerUIManager2.Elements.Clear() AdornerUIManager2.Elements.Clear()
' TODO - Hier passt etwas noch nicht
Root.Clear(disposeItemAndControls:=False) Root.Clear(disposeItemAndControls:=False)
LayoutControl1.Clear(True, True) LayoutControl1.Clear(True, True)
@ -768,6 +814,9 @@ Public Class frmMonitor
Dim oSQL = pParam.ItemString Dim oSQL = pParam.ItemString
Dim oTable = Database.GetDatatable(oSQL) Dim oTable = Database.GetDatatable(oSQL)
Return oTable Return oTable
Case Else
Return Nothing
End Select End Select
End Function End Function
@ -1196,7 +1245,7 @@ Public Class frmMonitor
End Sub End Sub
Private Sub GridViewResults_ColumnFilterChanged(sender As Object, e As EventArgs) Private Sub GridViewResults_ColumnFilterChanged(sender As Object, e As EventArgs)
Dim oView As GridView = sender Dim oView As GridView = CType(sender, GridView)
SetResultCount(oView.DataRowCount) SetResultCount(oView.DataRowCount)
End Sub End Sub
@ -1246,7 +1295,7 @@ Public Class frmMonitor
End Sub End Sub
Private Sub SetResultCount(pResults As Integer) Private Sub SetResultCount(pResults As Integer)
lbResultCount.Caption = String.Format(lbResultCount.Tag, pResults) lbResultCount.Caption = String.Format(CStr(lbResultCount.Tag), pResults)
End Sub End Sub
Private Sub SetSearchTimeValue(pValue As String) Private Sub SetSearchTimeValue(pValue As String)
@ -1258,7 +1307,7 @@ Public Class frmMonitor
End Sub End Sub
Private Sub SetVersion() Private Sub SetVersion()
lbVersion.Caption = String.Format(lbVersion.Tag, System.Reflection.Assembly.GetEntryAssembly().GetName().Version) lbVersion.Caption = String.Format(CStr(lbVersion.Tag), System.Reflection.Assembly.GetEntryAssembly().GetName().Version)
End Sub End Sub
Private Sub InitGrid() Private Sub InitGrid()
@ -1327,8 +1376,8 @@ Public Class frmMonitor
Try Try
If Not IsNothing(SelectedChart) Then If Not IsNothing(SelectedChart) Then
XtraSaveFileDialog1.Filter = "PDF Files (*.pdf*)|*.pdf" XtraSaveFileDialog1.Filter = "PDF Files (*.pdf*)|*.pdf"
XtraSaveFileDialog1.FileName = SelectedChart.Titles(0).ToString()
If XtraSaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then If XtraSaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
' TODO: Filename
ExportChart2Pdf(SelectedChart, XtraSaveFileDialog1.FileName) ExportChart2Pdf(SelectedChart, XtraSaveFileDialog1.FileName)
End If End If
Else Else
@ -1342,9 +1391,9 @@ Public Class frmMonitor
Private Sub btnExportChart2PNG_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnExportChart2PNG.ItemClick Private Sub btnExportChart2PNG_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnExportChart2PNG.ItemClick
Try Try
If Not IsNothing(SelectedChart) Then If Not IsNothing(SelectedChart) Then
XtraSaveFileDialog1.Filter = "PNG Files(* .png *)|*.png" XtraSaveFileDialog1.Filter = "PNG Files (*.png*)|*.png"
XtraSaveFileDialog1.FileName = SelectedChart.Titles(0).ToString()
If XtraSaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then If XtraSaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
' TODO: Filename
ExportChartToImage(SelectedChart, XtraSaveFileDialog1.FileName) ExportChartToImage(SelectedChart, XtraSaveFileDialog1.FileName)
End If End If
Else Else

View File

@ -116,19 +116,19 @@ Public Class GridLoader
oChartViewResultContainer.Panel1.AddControl(oSplitContainerTop) oChartViewResultContainer.Panel1.AddControl(oSplitContainerTop)
oChartViewResultContainer.Panel2.AddControl(oSplitContainerBottom) oChartViewResultContainer.Panel2.AddControl(oSplitContainerBottom)
Dim oChartControlTopLeft As ChartControl = New ChartControl With { Dim oChartControlTopLeft As New ChartControl With {
.Name = "ChartControlTopLeft", .Name = "ChartControlTopLeft",
.Dock = DockStyle.Fill .Dock = DockStyle.Fill
} }
Dim oChartControlTopRight As ChartControl = New ChartControl With { Dim oChartControlTopRight As New ChartControl With {
.Name = "ChartControlTopRight", .Name = "ChartControlTopRight",
.Dock = DockStyle.Fill .Dock = DockStyle.Fill
} }
Dim oChartControlBottomLeft As ChartControl = New ChartControl With { Dim oChartControlBottomLeft As New ChartControl With {
.Name = "ChartControlBottomLeft", .Name = "ChartControlBottomLeft",
.Dock = DockStyle.Fill .Dock = DockStyle.Fill
} }
Dim oChartControlBottomRight As ChartControl = New ChartControl With { Dim oChartControlBottomRight As New ChartControl With {
.Name = "ChartControlBottomRight", .Name = "ChartControlBottomRight",
.Dock = DockStyle.Fill .Dock = DockStyle.Fill
} }

View File

@ -93,7 +93,7 @@ Public Class SearchLoader
End Sub End Sub
Public Sub LoadChartParameters() Public Sub LoadChartParameters()
Dim oSQL As String = $"SELECT * FROM TBMON_CHARTS" Dim oSQL As String = $"SELECT * FROM TBMON_CHARTS WHERE ACTIVE = 1"
Dim oTable As DataTable = Database.GetDatatable(oSQL) Dim oTable As DataTable = Database.GetDatatable(oSQL)
Dim oParameters As New List(Of ChartParameter) Dim oParameters As New List(Of ChartParameter)
@ -106,7 +106,8 @@ Public Class SearchLoader
.SQLCommand = oRow.ItemEx("SQL_COMMAND", String.Empty), .SQLCommand = oRow.ItemEx("SQL_COMMAND", String.Empty),
.ChartType = GetChartType(oRow.ItemEx("CHART_TYPE", String.Empty)), .ChartType = GetChartType(oRow.ItemEx("CHART_TYPE", String.Empty)),
.Argument = oRow.ItemEx("ARGUMENT", String.Empty), .Argument = oRow.ItemEx("ARGUMENT", String.Empty),
.Value = oRow.ItemEx("VALUE", String.Empty) .Value = oRow.ItemEx("VALUE", String.Empty),
.LabelType = GetLabelType(oRow.ItemEx("LABEL_TYPE", String.Empty))
}) })
Next Next
@ -162,11 +163,24 @@ Public Class SearchLoader
Return ChartTypeEnum.Line Return ChartTypeEnum.Line
Case "PIE" Case "PIE"
Return ChartTypeEnum.Pie Return ChartTypeEnum.Pie
Case "STACKEDBAR"
Return ChartTypeEnum.StackedBar
Case Else Case Else
Return ChartTypeEnum.Undefined Return ChartTypeEnum.Undefined
End Select End Select
End Function End Function
Private Function GetLabelType(pTypeString As String) As LabelTypeEnum
Select Case pTypeString.ToUpper
Case "NOLABELS"
Return LabelTypeEnum.NoLabels
Case "DEFAULT"
Return LabelTypeEnum.DefaultLabels
Case Else
Return LabelTypeEnum.NoLabels
End Select
End Function
Private Function GetChartPosType(pPosTypeId As Integer) As ChartPosEnum Private Function GetChartPosType(pPosTypeId As Integer) As ChartPosEnum
Select Case pPosTypeId Select Case pPosTypeId
Case 1 Case 1