Chart-Logik: Export-Funktionen implementiert

This commit is contained in:
2023-04-13 13:01:12 +02:00
parent eca0a779ca
commit e735a061d8
4 changed files with 248 additions and 16 deletions

View File

@@ -21,7 +21,11 @@ Imports DigitalData.Modules.Language.Utils
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Patterns
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]"}
@@ -84,6 +88,7 @@ Public Class frmMonitor
Private Validator As Validator
Private GridLoader As GridLoader
Private SelectedChart As ChartControl
Private Sub frmStart_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
@@ -125,9 +130,12 @@ Public Class frmMonitor
Validator = New Validator(LogConfig, LayoutControl1, AdornerUIManager2, ControlHelper)
GridLoader = New GridLoader(LogConfig, SvgImageCollection1)
AddHandler GridLoader.ChartControlClicked, AddressOf ChartControl_Click
InitGrid()
InitTreeList()
InitChartContainer()
InitBarItems()
Dim oGrids As GridView() = New List(Of GridView) From {GridView1, GridView2, GridView3, GridView4}.ToArray
GridBuilder.SetDefaults(oGrids)
@@ -235,8 +243,6 @@ Public Class frmMonitor
TreeListResults.DataSource = oTable
lbResultCount.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
Dim oMaxLength = 0
For Each oRow As DataRow In oTable.Rows
Dim oProcess = oRow.Item("COLUMN1")
@@ -339,8 +345,6 @@ Public Class frmMonitor
GridViewResults.PopulateColumns()
GridBuilder.SetDateTimeColumns(GridViewResults)
lbResultCount.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
For Each oColumn As GridColumn In GridViewResults.Columns
If oColumn.ColumnType = GetType(Integer) Then
oColumn.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center
@@ -525,7 +529,6 @@ Public Class frmMonitor
End Sub
Private Sub SetResultVisbility(pSearchMode As ReturnTypeEnum)
Select Case pSearchMode
Case ReturnTypeEnum.TreeView
@@ -535,8 +538,13 @@ Public Class frmMonitor
TreeListResults.Dock = DockStyle.Fill
ChartViewResultContainer.Visible = False
ChartViewResultContainer.Dock = DockStyle.None
btnExportDetails.Enabled = True
btnExportMain.Enabled = True
lbResultCount.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
EnableButtons(btnExportMain)
EnableButtons(btnExportDetails)
DisableButtons(btnExportChart2PDF)
DisableButtons(btnExportChart2PNG)
Case ReturnTypeEnum.ChartView
GridControlResults.Visible = False
@@ -545,8 +553,13 @@ Public Class frmMonitor
TreeListResults.Dock = DockStyle.None
ChartViewResultContainer.Visible = True
ChartViewResultContainer.Dock = DockStyle.Fill
btnExportDetails.Enabled = False
btnExportMain.Enabled = False
lbResultCount.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
DisableButtons(btnExportMain)
DisableButtons(btnExportDetails)
EnableButtons(btnExportChart2PDF)
EnableButtons(btnExportChart2PNG)
Case ReturnTypeEnum.Table
GridControlResults.Visible = True
@@ -555,12 +568,40 @@ Public Class frmMonitor
TreeListResults.Dock = DockStyle.None
ChartViewResultContainer.Visible = False
ChartViewResultContainer.Dock = DockStyle.None
btnExportDetails.Enabled = True
btnExportMain.Enabled = True
lbResultCount.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
EnableButtons(btnExportMain)
EnableButtons(btnExportDetails)
DisableButtons(btnExportChart2PDF)
DisableButtons(btnExportChart2PNG)
End Select
End Sub
Private Sub DisableButtons(pBarButtonItem As BarButtonItem)
pBarButtonItem.Enabled = False
pBarButtonItem.Visibility = BarItemVisibility.Never
End Sub
Private Sub EnableButtons(pBarButtonItem As BarButtonItem)
pBarButtonItem.Enabled = True
pBarButtonItem.Visibility = BarItemVisibility.Always
End Sub
Private Sub InitBarItems()
btnExportMain.Visibility = BarItemVisibility.Always
btnExportMain.Enabled = False
btnExportDetails.Visibility = BarItemVisibility.Always
btnExportDetails.Enabled = False
DisableButtons(btnExportChart2PDF)
DisableButtons(btnExportChart2PNG)
lbResultCount.Visibility = BarItemVisibility.Never
lbSearchTime.Visibility = BarItemVisibility.Never
End Sub
''' <summary>
''' Linklogik für Hyperlink-Spalten
''' </summary>
@@ -668,6 +709,9 @@ Public Class frmMonitor
DisposeGrid()
InitGrid()
DisposeCharts()
InitChartContainer()
SplitContainerSQL.Collapsed = True
SplitContainerFileHTML.Collapsed = True
@@ -675,6 +719,7 @@ Public Class frmMonitor
btnExportDetails.Enabled = False
SetResultCount(0)
InitBarItems()
LoadSearch()
HideAllTabs()
@@ -1177,10 +1222,14 @@ Public Class frmMonitor
DisposeGrid()
InitGrid()
DisposeCharts()
InitChartContainer()
HideAllTabs()
Await LoadData()
SetResultCount(0)
InitBarItems()
End If
End Sub
@@ -1191,12 +1240,21 @@ Public Class frmMonitor
GridControlResults = Nothing
End Sub
Private Sub DisposeCharts()
ChartViewResultContainer.Dispose()
ChartViewResultContainer = Nothing
End Sub
Private Sub SetResultCount(pResults As Integer)
lbResultCount.Caption = String.Format(lbResultCount.Tag, pResults)
End Sub
Private Sub SetSearchTimeValue(pValue As String)
lbSearchTime.Caption = pValue
If pValue.Equals("00:00") Then
lbSearchTime.Caption = ""
Else
lbSearchTime.Caption = pValue
End If
End Sub
Private Sub SetVersion()
@@ -1230,8 +1288,8 @@ Public Class frmMonitor
Private Sub InitChartContainer()
ChartViewResultContainer = GridLoader.InitChartViewResultContainer()
SplitContainerSQL.Panel1.Controls.Add(ChartViewResultContainer)
SelectedChart = Nothing
End Sub
Private Sub ResizeCharContainer()
@@ -1261,5 +1319,87 @@ Public Class frmMonitor
End Try
End Sub
Private Sub ChartControl_Click(sender As Object, e As EventArgs)
SelectedChart = CType(sender, ChartControl)
End Sub
Private Sub btnExportChart2PDF_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnExportChart2PDF.ItemClick
Try
If Not IsNothing(SelectedChart) Then
XtraSaveFileDialog1.Filter = "PDF Files (*.pdf*)|*.pdf"
If XtraSaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
' TODO: Filename
ExportChart2Pdf(SelectedChart, XtraSaveFileDialog1.FileName)
End If
Else
FormHelper.ShowInfoMessage("Bitte einen Chart auswählen", "Chart Export per PDF")
End If
Catch ex As Exception
FormHelper.ShowErrorMessage(ex, "Chart Export nach PDF")
End Try
End Sub
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"
If XtraSaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
' TODO: Filename
ExportChartToImage(SelectedChart, XtraSaveFileDialog1.FileName)
End If
Else
FormHelper.ShowInfoMessage("Bitte einen Chart auswählen", "Chart Export per PNG")
End If
Catch ex As Exception
FormHelper.ShowErrorMessage(ex, "Chart Export nach PNG")
End Try
End Sub
Sub ExportChart2Pdf(pMyChart As ChartControl, pFilePath As String)
Try
pMyChart.OptionsPrint.ImageFormat = DevExpress.XtraCharts.Printing.PrintImageFormat.Metafile
pMyChart.ExportToPdf(pFilePath, New DevExpress.XtraPrinting.PdfExportOptions With {
.ConvertImagesToJpeg = False
})
' Exports to a stream as PDF.
Dim pdfStream As FileStream = New FileStream(pFilePath, FileMode.Create)
pMyChart.ExportToPdf(pdfStream)
' ...
pdfStream.Close()
Catch ex As Exception
Logger.Error(ex)
End Try
End Sub
Sub ExportChartToImage(pMyChart As ChartControl, pFilePath As String)
Try
SaveChartImageToFile(pMyChart, ImageFormat.Png, pFilePath)
Dim image As Image = GetChartImage(pMyChart, ImageFormat.Png)
image.Save(pFilePath)
Catch ex As Exception
Logger.Error(ex)
End Try
End Sub
Private Sub SaveChartImageToFile(ByVal chart As ChartControl, ByVal format As ImageFormat, ByVal fileName As String)
' Create an image in the specified format from the chart
' and save it to the specified path.
chart.ExportToImage(fileName, format)
End Sub
Private Function GetChartImage(ByVal chart As ChartControl, ByVal format As ImageFormat) As Image
' Create an image.
Dim image As Image = Nothing
' Create an image of the chart.
Using s As New MemoryStream()
chart.ExportToImage(s, format)
image = System.Drawing.Image.FromStream(s)
End Using
' Return the image.
Return image
End Function
End Class