Imports DevExpress.Utils
Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Columns
Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.XtraEditors
Imports DevExpress.XtraEditors.Repository
Public Class ClassGridFormatter
Private Shared tDate As Type = GetType(Date)
Private Shared tBool As Type = GetType(Boolean)
Public Enum DataTableType
CONSTRUCTOR_VIEW
WINDREAM_RESULT
End Enum
'''
''' Die Formatierungsfunktionen für die ConstruktorView Tabellen
'''
Public Class ConstructorView
Private EntityId As Integer
Private DT As DataTable
Private dateEdit As New RepositoryItemTimeEdit()
Private checkboxEdit = New RepositoryItemCheckEdit()
Public checkboxColumns As New List(Of String)
Public dateColumns As New List(Of String)
Public currencyColumns As New List(Of String)
Public Sub New(DT As DataTable, EntityId As Integer)
Me.EntityId = EntityId
Me.DT = DT
' dateEdit vor-formatieren
dateEdit.DisplayFormat.FormatType = FormatType.DateTime
dateEdit.DisplayFormat.FormatString = CURRENT_DATE_FORMAT
dateEdit.Mask.MaskType = Mask.MaskType.DateTime
dateEdit.Mask.EditMask = CURRENT_DATE_FORMAT
dateEdit.Mask.UseMaskAsDisplayFormat = True
' checkboxEdit vor-formatieren
checkboxEdit.ValueChecked = True
checkboxEdit.ValueUnchecked = False
End Sub
Public Function FormatDatatable() As DataTable
Try
' Datatable klonen, um Spalten zu formatieren
Dim clonedDT As DataTable = Me.DT.Clone()
' Checkbox Spalten bestimmen
Me.checkboxColumns = GetCheckboxColumns()
' Checkbox Spalten formatieren
For Each columnName As String In Me.checkboxColumns
Dim column As DataColumn = clonedDT.Columns(columnName)
If Not IsNothing(column) Then
column.DataType = tBool
End If
Next
' Datums Spalten bestimmen
Me.dateColumns = GetDateColumns()
' Datums Spalten Formatieren
For Each columnName As String In Me.dateColumns
Dim column As DataColumn = clonedDT.Columns(columnName)
If Not IsNothing(column) Then
column.DataType = tDate
End If
Next
' Daten aus DT in formatierte DataTable clonedDT laden
clonedDT.Load(DT.CreateDataReader)
Return clonedDT
Catch ex As Exception
LOGGER.Warn("Unexpected Error in FormatDatatable: " & ex.Message)
Return DT
End Try
End Function
Public Sub FormatGridView(gridView As GridView)
Try
If IsNothing(gridView.GridControl.DataSource) Then
Throw New Exception("Error in FormatGridView: DataSource is Empty!")
End If
' Editoren zum Grid hinzufügen
gridView.GridControl.RepositoryItems.AddRange({checkboxEdit, dateEdit})
For Each columnName As String In Me.dateColumns
Dim column As GridColumn = gridView.Columns(columnName)
If Not IsNothing(column) Then
column.DisplayFormat.FormatType = FormatType.DateTime
column.DisplayFormat.FormatString = CURRENT_DATE_FORMAT
column.OptionsFilter.FilterPopupMode = FilterPopupMode.Date
column.FilterMode = ColumnFilterMode.Value ' was DisplayText
column.ColumnEdit = dateEdit
End If
Next
For Each columnName As String In Me.checkboxColumns
Dim column As GridColumn = gridView.Columns(columnName)
If Not IsNothing(column) Then
column.ColumnEdit = checkboxEdit
End If
Next
currencyColumns = GetCurrencyColumns()
For Each columnName As String In currencyColumns
Dim column As GridColumn = gridView.Columns(columnName)
If Not IsNothing(column) Then
column.DisplayFormat.FormatType = FormatType.Numeric
column.DisplayFormat.FormatString = "C"
column.DisplayFormat.Format = New CurrencyFormatter()
End If
Next
Catch ex As Exception
LOGGER.Warn("Unexpected Error in FormatGridView: " & ex.Message)
End Try
End Sub
Class CurrencyFormatter
Implements IFormatProvider, ICustomFormatter
Public Function GetFormat(formatType As Type) As Object Implements IFormatProvider.GetFormat
Return Me
End Function
Public Function Format(formatString As String, arg As Object, formatProvider As IFormatProvider) As String Implements ICustomFormatter.Format
Dim formatValue As String = arg.ToString()
If (formatValue.Count > 0 And formatString.ToUpper() = "C") Then
Return ClassHelper.Format_Currency(formatValue, USER_LANGUAGE)
Else
Return formatValue
End If
End Function
End Class
Private Function GetCurrencyColumns() As List(Of String)
Try
Dim list As New List(Of String)
' Alle Currency Felder für aktuelle Ansicht heraussuchen
Dim sql As String = "SELECT COL_NAME FROM TBPMO_CONTROL WHERE CONTROL_TYPE_ID = 2 AND FORMAT_TYPE = 'Currency' AND SHOW_COLUMN = 1 AND FORM_ID = " & Me.EntityId
Dim dt As DataTable = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_CONTROL, "CONTROL_TYPE_ID = 2 AND FORMAT_TYPE = 'Currency' AND SHOW_COLUMN = 1 AND FORM_ID = " & Me.EntityId, "")
For Each row As DataRow In dt.Rows
list.Add(row.Item("COL_NAME"))
Next
Return list
Catch ex As Exception
LOGGER.Warn("Unexpected Error in GetCurrencyColumns: " & ex.Message)
Return Nothing
End Try
End Function
Private Function GetCheckboxColumns()
Try
Dim listcheck As New List(Of String)
' Alle Checkboxen für aktuelle Ansicht heraussuchen
' Dim sqlcheck As String = "SELECT COL_NAME FROM TBPMO_CONTROL WHERE CONTROL_TYPE_ID in (10,11) AND SHOW_COLUMN = 1 AND FORM_ID = " & Me.EntityId
Dim dtcheck As DataTable = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_CONTROL, "CONTROL_TYPE_ID in (10,11) AND SHOW_COLUMN = 1 AND FORM_ID = " & Me.EntityId, "")
'Liste von allen Spaltentiteln mit Checkbox erstellen
If dtcheck.Rows.Count > 0 Then
For Each row As DataRow In dtcheck.Rows
listcheck.Add(row.Item("COL_NAME"))
Next
End If
listcheck.Add("files?")
Return listcheck
Catch ex As Exception
LOGGER.Warn("Unexpected Error in GetCheckboxColumns: " & ex.Message)
Return Nothing
End Try
End Function
Private Function GetDateColumns()
Try
Dim listdate As New List(Of String)
' Alle Checkboxen für aktuelle Ansicht heraussuchen
' Dim sqlcheck As String = "SELECT COL_NAME FROM TBPMO_CONTROL WHERE CONTROL_TYPE_ID = 4 AND SHOW_COLUMN = 1 AND FORM_ID = " & Me.EntityId
Dim dtdate As DataTable = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_CONTROL, "CONTROL_TYPE_ID = 4 AND SHOW_COLUMN = 1 AND FORM_ID = " & Me.EntityId, "")
'Liste von allen Spaltentiteln mit Checkbox erstellen
If dtdate.Rows.Count > 0 Then
For Each row As DataRow In dtdate.Rows
listdate.Add(row.Item("COL_NAME"))
Next
End If
Return listdate
Catch ex As Exception
LOGGER.Warn("Unexpected Error in GetCheckboxColumns: " & ex.Message)
Return Nothing
End Try
End Function
End Class
'''
''' Die Formatierungsfunktionen für die WindreamResult Tabellen
'''
Public Class WindreamResult
End Class
End Class