Make DisplayFormat configurable for TextBoxes and GridColumns, Fix Typo, Properly Convert Dates and Numbers in Vector Fields

This commit is contained in:
Jonathan Jenne
2023-05-23 11:15:21 +02:00
parent e7a60d3515
commit bd35cccdb1
14 changed files with 648 additions and 660 deletions

View File

@@ -4,20 +4,21 @@ Imports System.Runtime.InteropServices
Imports System.IO
Imports System.Text.RegularExpressions
Imports System.ComponentModel
Imports System.Globalization
Imports DigitalData.Controls.LookupGrid
Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Views.Grid
Imports DigitalData.Modules.Language.Utils
Imports DigitalData.Modules.Language
Imports DigitalData.Modules.Base
Imports DigitalData.Modules.EDMI.API.DatabaseWithFallback
Imports DigitalData.Modules.EDMI.API.Constants
Imports DevExpress.XtraBars
Imports DigitalData.GUIs.Common.DocumentResultList
Imports DigitalData.Modules.ZooFlow
Imports DigitalData.Modules.ZooFlow.Constants
Imports DigitalData.GUIs.Common
Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.XtraBars
Imports DevExpress.XtraGrid.Columns
Imports System.Globalization
Public Class frmValidator
Private Property Current_Document As DocumentResultList.Document = Nothing
@@ -2638,8 +2639,8 @@ Public Class frmValidator
LOGGER.Info("LoadNextDocument - Dokument-GUID: '" & CURRENT_DOC_GUID.ToString & "'")
If CURRENT_DOC_GUID > 0 Then
If (OPERATION_MODE_FS = ClassConstants.OpModeFS_PWM Or OPERATION_MODE_FS = ClassConstants.OpModeFS_IDBWM) And GetDocPathWindows(0) = False Then
SetStatusLabel($"File not accessable: {DocPathWindows}", "DarkOrange")
MsgBox("The file can not be diplayed or is not accessable!", MsgBoxStyle.Exclamation, ADDITIONAL_TITLE)
SetStatusLabel($"File not accessible: {DocPathWindows}", "DarkOrange")
MsgBox("The file can not be diplayed or is not accessible!", MsgBoxStyle.Exclamation, ADDITIONAL_TITLE)
End If
If IDB_ACTIVE = False Then
If CreateWMObject() = False Then
@@ -3182,67 +3183,12 @@ Public Class frmValidator
End If
End If
End If
Try
Dim oFormatString As String = oControlRow.ItemEx("CTRL_FORMAT_STRING", "")
If oFormatString <> String.Empty Then
' https://learn.microsoft.com/en-us/dotnet/api/system.datetime.tostring?view=net-7.0#system-datetime-tostring(system-string)
oFormattedValue = ClassFormat.GetFormattedValue(oControl.Name, oValueFromSource, oFormatString)
Select Case oFormatString
Case "Currency" ' 16,325.63 €
Dim oValue As Double = oValueFromSource
oFormattedValue = oValue.ToString("C2")
Case "Decimal" ' 16325,63
Dim oValue As Double = oValueFromSource
oFormattedValue = oValue.ToString("F")
Case "Date" ' 15.06.2008
Dim oValue As DateTime = oValueFromSource
oFormattedValue = oValue.ToString("d")
Case "DateTime" ' 15.06.2008 9:15:07
Dim oValue As DateTime = oValueFromSource
oFormattedValue = oValue.ToString("G")
End Select
End If
Catch ex As Exception
LOGGER.Warn($"Unexpected error in Format String [{oControl.Name}]: {ex.Message}")
LOGGER.Error(ex)
End Try
Try
'Dim oFormatString As String = oControlRow.ItemEx("CTRL_FORMAT_STRING", "")
'If oFormatString <> String.Empty Then
' Try
' Dim oSPlit = Split(oFormatString, ";")
' If oSPlit(0) = "Decimal" Then
' LOGGER.Debug("FORMAT_STRING DECIMAL")
' oFormattedValue = oValueFromSource
' LOGGER.Debug($"Unformatted String: {oFormattedValue}")
' Dim oFormattedDec As Decimal = oValueFromSource
' If oSPlit.Length = 3 Then
' oFormattedValue = $"{oFormattedDec.ToString(oSPlit(1))} {oSPlit(2)}"
' ElseIf oSPlit.Length = 4 Then
' oFormattedValue = $"{oFormattedDec.ToString(oSPlit(1), New CultureInfo(oSPlit(2)))} {oSPlit(3)}"
' Else
' oFormatString = oFormatString.Replace("Decimal;", "")
' End If
' LOGGER.Debug($"Formatted String: {oFormattedValue}")
' End If
' Catch ex As Exception
' LOGGER.Warn($"Unexpected error in Format String [{oControl.Name}]: {ex.Message}")
' LOGGER.Error(ex)
' End Try
'End If
If Not IsNothing(oFormattedValue) And oFormattedValue <> String.Empty Then
oControl.Text = NotNull(oFormattedValue, oDefaultValue)
Else
@@ -3264,11 +3210,13 @@ Public Class frmValidator
Dim oSQl = $"SELECT CASE WHEN {oExpression} THEN CONVERT(BIT,1) ELSE CONVERT(BIT,0) END "
Dim oColorName = IIf(DatabaseECM.GetScalarValue(oSQl), oSPlit(1), oSPlit(2))
oControl.BackColor = Color.FromName(oColorName)
If oColorName = "Green" Or oColorName = "Blue" Or oColorName = "Red" Then
oControl.ForeColor = Color.FromName("White")
Else
oControl.ForeColor = Color.FromName("Black")
End If
oControl.ForeColor = GraphicsEx.GetContrastedColor(oControl.BackColor)
'If oColorName = "Green" Or oColorName = "Blue" Or oColorName = "Red" Then
' oControl.ForeColor = Color.FromName("White")
'Else
' oControl.ForeColor = Color.FromName("Black")
'End If
End If
End If
Catch ex As Exception
@@ -3447,25 +3395,37 @@ Public Class frmValidator
If oColValuesfromSource.Length > 8 Then
LOGGER.Warn("Fill Grid Error - Max 8 columns can be configured!")
End If
Select Case oColValuesfromSource.Length
Case 1
oDataSource.Rows.Add(New String() {oColValuesfromSource(0)})
Case 2
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1)})
Case 3
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2)})
Case 4
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3)})
Case 5
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4)})
Case 6
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4), oColValuesfromSource(5)})
Case 7
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4), oColValuesfromSource(5), oColValuesfromSource(6)})
Case 8
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4), oColValuesfromSource(5), oColValuesfromSource(6), oColValuesfromSource(7)})
End Select
Dim oRowData As New List(Of Object)
For index = 1 To oColValuesfromSource.Length
Dim oColumnType = oDTColumnsPerDevExGrid.Rows.Item(index - 1).Item("TYPE_COLUMN")
Dim oConvertedValue = ClassFormat.GetConvertedValue(oColValuesfromSource(index - 1), oColumnType)
oRowData.Add(oConvertedValue)
Next
oDataSource.Rows.Add(oRowData.ToArray())
'Select Case oColValuesfromSource.Length
' Case 1
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0)})
' Case 2
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1)})
' Case 3
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2)})
' Case 4
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3)})
' Case 5
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4)})
' Case 6
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4), oColValuesfromSource(5)})
' Case 7
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4), oColValuesfromSource(5), oColValuesfromSource(6)})
' Case 8
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4), oColValuesfromSource(5), oColValuesfromSource(6), oColValuesfromSource(7)})
'End Select
ElseIf oValueType = "System.Data.DataTable" Then
Dim oMyDatatable As DataTable = oValueFromSource
LOGGER.Debug($"IDB Fill Grid [{oControl.Name}] with Datatable - Rows: " & oMyDatatable.Rows.Count)
@@ -3473,28 +3433,39 @@ Public Class frmValidator
LOGGER.Debug($"IDB ROW Vector {oRow.Item(0).ToString}...")
oColValuesfromSource = Split(oRow.Item(0).ToString, PMDelimiter)
'If USER_USERNAME.ToLower = "'marscheiber" Then MsgBox($"IDB ROW Vector {oRow.Item(0).ToString}...")
If oColValuesfromSource.Length > 8 Then
LOGGER.Warn("Fill Grid with DatatableSplit Error - Max 8 columns can be configured!")
End If
Select Case oColValuesfromSource.Length
Case 1
oDataSource.Rows.Add(New String() {oColValuesfromSource(0)})
Case 2
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1)})
Case 3
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2)})
Case 4
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3)})
Case 5
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4)})
Case 6
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4), oColValuesfromSource(5)})
Case 7
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4), oColValuesfromSource(5), oColValuesfromSource(6)})
Case 8
oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4), oColValuesfromSource(5), oColValuesfromSource(6), oColValuesfromSource(7)})
End Select
Dim oRowData As New List(Of Object)
For index = 1 To oColValuesfromSource.Length
Dim oColumnType = oDTColumnsPerDevExGrid.Rows.Item(index - 1).Item("TYPE_COLUMN")
Dim oConvertedValue = ClassFormat.GetConvertedValue(oColValuesfromSource(index - 1), oColumnType)
oRowData.Add(oConvertedValue)
Next
oDataSource.Rows.Add(oRowData.ToArray())
'Select Case oColValuesfromSource.Length
' Case 1
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0)})
' Case 2
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1)})
' Case 3
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2)})
' Case 4
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3)})
' Case 5
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4)})
' Case 6
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4), oColValuesfromSource(5)})
' Case 7
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4), oColValuesfromSource(5), oColValuesfromSource(6)})
' Case 8
' oDataSource.Rows.Add(New String() {oColValuesfromSource(0), oColValuesfromSource(1), oColValuesfromSource(2), oColValuesfromSource(3), oColValuesfromSource(4), oColValuesfromSource(5), oColValuesfromSource(6), oColValuesfromSource(7)})
'End Select
Next
End If
@@ -5424,9 +5395,12 @@ Public Class frmValidator
Dim oValueList As New List(Of String)
For Each item In oRow.ItemArray
For Each item As Object In oRow.ItemArray
item = NotNull(item, String.Empty)
If TypeOf item IsNot String Then item.ToString()
' Convert to string using InvariantCulture, so converting back from string does not screw up values
If TypeOf item IsNot String Then
item = String.Format(CultureInfo.InvariantCulture, "{0}", item)
End If
oValueList.Add(item)
Next