Speed Otimizing Lookp etc

This commit is contained in:
Developer01
2026-01-30 12:53:01 +01:00
parent a53bfee8d5
commit 0f936c71e6

View File

@@ -127,6 +127,7 @@ Public Class frmValidator
Private ReadOnly _SqlDataCache As New Dictionary(Of String, DataTable)(StringComparer.OrdinalIgnoreCase)
Private ReadOnly _SqlScalarCache As New Dictionary(Of String, Object)(StringComparer.OrdinalIgnoreCase)
Private _SqlControlsByGuid As Dictionary(Of Integer, List(Of DataRow))
Private _LookupControlsByRepository As Dictionary(Of RepositoryItemLookupControl3, LookupControl3)
Private Class Translation_Strings
Inherits My.Resources.frmValidator_Strings
End Class
@@ -934,6 +935,7 @@ Public Class frmValidator
Try
PanelValidatorControl.Controls.Clear()
_LookupControlsByRepository = New Dictionary(Of RepositoryItemLookupControl3, LookupControl3)()
Dim oSQL = $"SELECT [dbo].[FNPM_LANGUAGE_CONTROL_TEXT] (NAME,'{USER_LANGUAGE}',CTRL_TYPE,CTRL_TEXT) CTRL_CAPTION_LANG, * FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1 AND PROFIL_ID = {CURRENT_ProfilGUID} ORDER BY Y_LOC, X_LOC"
DT_CONTROLS = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS_LANGUAGE", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
.FilterExpression = $"LANGUAGE = '{USER_LANGUAGE}' AND PROFIL_ID = {CURRENT_ProfilGUID}",
@@ -1136,21 +1138,57 @@ Public Class frmValidator
'MyLookupControl.Properties.AllowAddNewValues = oControlRow.Item("VKT_ADD_ITEM")
MyLookupControl.Properties.MultiSelect = oMultiselect
Dim oCONID As Integer
Try
oCONID = PreventNulletc(oControlRow.Item("CONNECTION_ID"), "Integer")
Catch ex As Exception
oCONID = 0
End Try
If oCONID > 0 Then
Dim oCommandSQL_UBPF
Try
oCommandSQL_UBPF = oControlRow.Item("SQL_UEBERPRUEFUNG")
oCommandSQL_UBPF = oControlRow.Item("SQL_UEBERPRUEFUNG")
Catch ex As Exception
oCommandSQL_UBPF = ""
End Try
If oCommandSQL_UBPF <> String.Empty Then
Try
oSQL = PreventNulletc(oControlRow.Item("SQL_UEBERPRUEFUNG"), "String")
If clsPatterns.HasOnlySimplePatterns(oSQL) Then
oSQL = clsPatterns.ReplaceInternalValues(oSQL)
oSQL = clsPatterns.ReplaceControlValues(oSQL, PanelValidatorControl, True)
Dim oDT As DataTable = GetCachedDatatable(oSQL, oCONID)
MyLookupControl.Properties.DataSource = Nothing
If Not IsNothing(oDT) AndAlso oDT.Rows.Count > 0 Then
MyLookupControl.Properties.DataSource = oDT
MyLookupControl.Properties.ValueMember = oDT.Columns.Item(0).ColumnName
MyLookupControl.Properties.DisplayMember = oDT.Columns.Item(0).ColumnName
End If
End If
Catch ex As Exception
MyValidationLogger.Warn($"Unexpected error in LOOKUP GetValues SQL - Error: {ex.Message}")
End Try
End If
End If
If ObjectEx.NotNull(oControlRow.Item("DEFAULT_VALUE"), "") <> "" Then
MyLookupControl.Properties.SelectedValues = New List(Of String) From {oControlRow.Item("DEFAULT_VALUE")}
End If
oMyControl = MyLookupControl
_LookupControlsByRepository(MyLookupControl.Properties) = MyLookupControl
AddHandler MyLookupControl.Properties.SelectedValuesChanged, AddressOf LookupListChanged
'Wenn Multiselect false dann prüfen ob abhängiges Control
' If oMultiselect = False Then
Dim oFilteredData As DataTable = DT_CONTROLS.Clone()
Dim oExpression = $"SQL_UEBERPRUEFUNG like '%#CTRL#{oMyControl.Name}%'"
DT_CONTROLS.Select(oExpression).CopyToDataTable(oFilteredData, LoadOption.PreserveChanges)
If oFilteredData.Rows.Count >= 1 Then
MyValidationLogger.Debug($"createControlsLU - Found {oFilteredData.Rows.Count} Controls which are depending on {oMyControl.Name}")
'AddHandler lookup.EditValueChanged, AddressOf onLookUp1
AddHandler MyLookupControl.Properties.SelectedValuesChanged, AddressOf onLookUpselectedValue
End If
@@ -1158,22 +1196,17 @@ Public Class frmValidator
DT_CONTROLS.Select(oExpression).CopyToDataTable(oFilteredData, LoadOption.PreserveChanges)
If oFilteredData.Rows.Count >= 1 Then
MyValidationLogger.Debug($"createControlsLU - Found {oFilteredData.Rows.Count} Controls which' enable state is depending on {oMyControl.Name}")
'AddHandler lookup.EditValueChanged, AddressOf onLookUp1
AddHandler MyLookupControl.Properties.SelectedValuesChanged, AddressOf onLookUpselectedValue
End If
oFilteredData = DT_CONTROLS.Clone()
oExpression = $"GUID = {oControlRow.Item("GUID")} and Len(SET_CONTROL_DATA) > 0"
DT_CONTROLS.Select(oExpression).CopyToDataTable(oFilteredData, LoadOption.PreserveChanges)
If oFilteredData.Rows.Count = 1 Then
'AddHandler lookup.EditValueChanged, AddressOf onLookUp1
AddHandler MyLookupControl.Properties.SelectedValuesChanged, AddressOf onLookUpselectedValue_Control2Set
End If
oFilteredData = DT_CONTROLS.Clone()
' End If
AddHandler MyLookupControl.GotFocus, Sub(sender As Control, e As EventArgs)
If DirectCast(MyLookupControl.Tag, ClassControlCreator.ControlMetadata).ReadOnly = False Then
MyLookupControl.BackColor = Color.LightSteelBlue
@@ -1186,11 +1219,6 @@ Public Class frmValidator
End Sub
End If
'Return filteredData
'AddHandler lookup.Leave, AddressOf onLookUp0
Case "CHK"
oControlInfo = "CHK#" & oControlInfo
oMyControl = ControlCreator.CreateExisingCheckbox(oControlRow, False)
@@ -1341,13 +1369,18 @@ Public Class frmValidator
Exit Sub
End If
Dim oTextbox As BaseEdit = sender
Dim oMeta As ClassControlCreator.ControlMetadata = oTextbox.Tag
If Not oMeta.IsDirty Then
oMeta.IsDirty = True
MyValidationLogger.Debug($"TextBox [{oMeta.Name}] marked as dirty")
Dim oTextbox As BaseEdit = TryCast(sender, BaseEdit)
If oTextbox Is Nothing Then
Exit Sub
End If
Dim oMeta As ClassControlCreator.ControlMetadata = TryCast(oTextbox.Tag, ClassControlCreator.ControlMetadata)
If oMeta Is Nothing OrElse oMeta.IsDirty Then
Exit Sub
End If
oMeta.IsDirty = True
MyValidationLogger.Debug($"TextBox [{oMeta.Name}] marked as dirty")
End Sub
Public Sub OnTextBoxKeyUp(sender As Object, e As KeyEventArgs)
@@ -1618,22 +1651,32 @@ Public Class frmValidator
If _FormLoaded = False Then
Exit Sub
End If
Dim oRepositoryItem As RepositoryItemLookupControl3 = sender
Dim oLookup As LookupControl3 = oRepositoryItem.OwnerEdit
Try
If Not IsNothing(SelectedValues) Then
If SelectedValues.Count >= 1 Then
LookupControl_DependingControls(oLookup, SelectedValues)
LookupControl_EnablingControls(oLookup, SelectedValues)
LookupControl_DependingColumn(oLookup, SelectedValues)
Else
MyValidationLogger.Debug("Attention: onLookUpselectedValue: SelectedValues.Count <> 1 ")
End If
End If
Catch ex As Exception
MyValidationLogger.Error(ex)
End Try
If SelectedValues Is Nothing OrElse SelectedValues.Count < 1 Then
MyValidationLogger.Debug("Attention: onLookUpselectedValue: SelectedValues.Count <> 1 ")
Exit Sub
End If
Dim oRepositoryItem As RepositoryItemLookupControl3 = sender
Dim oLookup As LookupControl3 = Nothing
If _LookupControlsByRepository IsNot Nothing Then
_LookupControlsByRepository.TryGetValue(oRepositoryItem, oLookup)
End If
If oLookup Is Nothing Then
oLookup = TryCast(oRepositoryItem.OwnerEdit, LookupControl3)
End If
If oLookup Is Nothing Then
MyValidationLogger.Warn("onLookUpselectedValue: LookupControl not found for RepositoryItem")
Exit Sub
End If
LookupControl_DependingControls(oLookup, SelectedValues)
LookupControl_EnablingControls(oLookup, SelectedValues)
LookupControl_DependingColumn(oLookup, SelectedValues)
Catch ex As Exception
MyValidationLogger.Warn("Unexpected error in onLookUpselectedValue - " + ex.Message)
MyValidationLogger.Error(ex)
@@ -1647,22 +1690,35 @@ Public Class frmValidator
Try
Dim oLookup As RepositoryItemLookupControl3 = sender
' NEU: Dirty-Flag setzen - Suche den zugehörigen LookupControl
For Each oControl In PanelValidatorControl.Controls
If TypeOf oControl Is LookupControl3 Then
Dim oLookupControl As LookupControl3 = DirectCast(oControl, LookupControl3)
If oLookupControl.Properties Is oLookup Then
Dim oMeta As ClassControlCreator.ControlMetadata = oLookupControl.Tag
oMeta.IsDirty = True
MyValidationLogger.Debug($"LookupControl [{oMeta.Name}] marked as dirty")
Exit For
Dim oLookupControl As LookupControl3 = Nothing
If _LookupControlsByRepository IsNot Nothing Then
_LookupControlsByRepository.TryGetValue(oLookup, oLookupControl)
End If
If oLookupControl Is Nothing Then
For Each oControl In PanelValidatorControl.Controls
If TypeOf oControl Is LookupControl3 Then
Dim tmp As LookupControl3 = DirectCast(oControl, LookupControl3)
If tmp.Properties Is oLookup Then
oLookupControl = tmp
Exit For
End If
End If
End If
Next
listChangedLookup.Add(oLookup.Name)
Next
End If
If oLookupControl IsNot Nothing Then
Dim oMeta As ClassControlCreator.ControlMetadata = oLookupControl.Tag
oMeta.IsDirty = True
MyValidationLogger.Debug($"LookupControl [{oMeta.Name}] marked as dirty")
listChangedLookup.Add(oLookupControl.Name)
Else
listChangedLookup.Add(oLookup.Name)
End If
ControlCreator.GridTables_HandleControlValueChange(PanelValidatorControl, DT_COLUMNS_GRID_WITH_SQL_WITH_CTRL_PLACEHOLDER)
'Verschiebt den Fokus auf das nächste Control
Dim oFound As Boolean = False
For Each oString As String In listofControls
If oString = oLookup.Name And oFound = False Then