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
Area
Pie
StackedBar
End Enum
Public Enum LabelTypeEnum
NoLabels
DefaultLabels
End Enum
End Namespace

View File

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

View File

@ -24,8 +24,7 @@ Imports DevExpress.XtraEditors
Imports System.Drawing.Imaging
Imports System.IO
Imports DevExpress.XtraBars
Imports DevExpress.Utils.CommonDialogs
Imports System.Windows.Forms.VisualStyles
Public Class frmMonitor
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 FileResultTabs As List(Of XtraTabPage)
Private FileResultViewerIndex As Integer = 0
'Private FileResultViewerIndex As Integer = 0
Private HtmlResultViewers As List(Of RichEditControl)
Private HtmlResultTabs As List(Of XtraTabPage)
@ -184,7 +183,7 @@ Public Class frmMonitor
Private Function LoadGDPicture() As String
Dim oSQL = "SELECT LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE NAME = 'GDPICTURE'"
Return Database.GetScalarValue(oSQL)
Return CStr(Database.GetScalarValue(oSQL))
End Function
@ -203,7 +202,7 @@ Public Class frmMonitor
Return False
End If
Dim oSearch As Search = cmbSearches.EditValue
Dim oSearch As Search = CType(cmbSearches.EditValue, Search)
InvisibleMarkedColumns.Clear()
VisibleMarkedColumns.Clear()
@ -223,7 +222,7 @@ Public Class frmMonitor
Dim oControls As List(Of Control) = LayoutControl1.Controls.Cast(Of Control).ToList()
Dim oSQL As String
Dim oTable As DataTable
Dim oTable As DataTable = Nothing
If oSearch.SQLCommand.Length > 0 Then
oSQL = Patterns.ReplaceControlValues(oSearch.SQLCommand, oControls)
@ -442,13 +441,17 @@ Public Class frmMonitor
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}"
oSerie = New Series(pChartParameters.Title, ViewType.Pie) With {
.LegendTextPattern = "{A}"
}
Case ChartTypeEnum.StackedBar
oSerie = New Series(pChartParameters.Title, ViewType.StackedBar)
Case Else
Return Nothing
End Select
SetSerieLabels(oSerie, pChartParameters.ChartType, pChartParameters.LabelType)
Dim oSQL As String = Patterns.ReplaceControlValues(pChartParameters.SQLCommand, pControls)
Logger.Debug($"SQL after replacing placeholder: [{0}]", oSQL)
Dim oTable As DataTable = Await Database.GetDatatableAsync(oSQL)
@ -457,8 +460,8 @@ Public Class frmMonitor
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)
Dim value1 As String = CStr(oRow.Item(xAxisTitle))
Dim value2 As String = CStr(oRow.Item(yAxisTitle))
oSerie.Points.Add(New SeriesPoint(value1, value2))
Next
@ -468,11 +471,53 @@ Public Class frmMonitor
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)
' 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 With {
Dim oTitle As New ChartTitle With {
.Text = pTitle
}
pChartView.Titles.Add(oTitle)
@ -619,7 +664,7 @@ Public Class frmMonitor
Return
Else
Dim oControl As Control = LayoutControl1.Controls.Find(oSearchParameter.PatternTitle, True).FirstOrDefault()
oControl.Text = e.EditValue
oControl.Text = CStr(e.EditValue)
End If
Await LoadData()
@ -663,7 +708,7 @@ Public Class frmMonitor
Exit Sub
End If
If pRootNode.Item("PARENT_ID") = 0 Then
If CType(pRootNode.Item("PARENT_ID"), Int32) = 0 Then
' Auswertung für Parent-Knoten
ExpandCollapseNode(pRootNode)
End If
@ -738,6 +783,7 @@ Public Class frmMonitor
AdornerUIManager2.Hide()
AdornerUIManager2.Elements.Clear()
' TODO - Hier passt etwas noch nicht
Root.Clear(disposeItemAndControls:=False)
LayoutControl1.Clear(True, True)
@ -768,6 +814,9 @@ Public Class frmMonitor
Dim oSQL = pParam.ItemString
Dim oTable = Database.GetDatatable(oSQL)
Return oTable
Case Else
Return Nothing
End Select
End Function
@ -1196,7 +1245,7 @@ Public Class frmMonitor
End Sub
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)
End Sub
@ -1246,7 +1295,7 @@ Public Class frmMonitor
End Sub
Private Sub SetResultCount(pResults As Integer)
lbResultCount.Caption = String.Format(lbResultCount.Tag, pResults)
lbResultCount.Caption = String.Format(CStr(lbResultCount.Tag), pResults)
End Sub
Private Sub SetSearchTimeValue(pValue As String)
@ -1258,7 +1307,7 @@ Public Class frmMonitor
End Sub
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
Private Sub InitGrid()
@ -1327,8 +1376,8 @@ Public Class frmMonitor
Try
If Not IsNothing(SelectedChart) Then
XtraSaveFileDialog1.Filter = "PDF Files (*.pdf*)|*.pdf"
XtraSaveFileDialog1.FileName = SelectedChart.Titles(0).ToString()
If XtraSaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
' TODO: Filename
ExportChart2Pdf(SelectedChart, XtraSaveFileDialog1.FileName)
End If
Else
@ -1342,9 +1391,9 @@ Public Class frmMonitor
Private Sub btnExportChart2PNG_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnExportChart2PNG.ItemClick
Try
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
' TODO: Filename
ExportChartToImage(SelectedChart, XtraSaveFileDialog1.FileName)
End If
Else

View File

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

View File

@ -93,7 +93,7 @@ Public Class SearchLoader
End Sub
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 oParameters As New List(Of ChartParameter)
@ -106,7 +106,8 @@ Public Class SearchLoader
.SQLCommand = oRow.ItemEx("SQL_COMMAND", String.Empty),
.ChartType = GetChartType(oRow.ItemEx("CHART_TYPE", 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
@ -162,11 +163,24 @@ Public Class SearchLoader
Return ChartTypeEnum.Line
Case "PIE"
Return ChartTypeEnum.Pie
Case "STACKEDBAR"
Return ChartTypeEnum.StackedBar
Case Else
Return ChartTypeEnum.Undefined
End Select
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
Select Case pPosTypeId
Case 1