From 969f27a91fc96d3b401041eb62c1e584afa49d23 Mon Sep 17 00:00:00 2001 From: Developer01 Date: Fri, 30 Jan 2026 13:00:16 +0100 Subject: [PATCH] frm main Load Grid Optimierung --- app/TaskFlow/frmMain.vb | 417 +++++++++++++++++----------------------- 1 file changed, 176 insertions(+), 241 deletions(-) diff --git a/app/TaskFlow/frmMain.vb b/app/TaskFlow/frmMain.vb index 0152806..95d49d0 100644 --- a/app/TaskFlow/frmMain.vb +++ b/app/TaskFlow/frmMain.vb @@ -962,78 +962,82 @@ Public Class frmMain End Sub Async Function Load_single_Profile(Optional ForceReload As Boolean = False) As Tasks.Task + Dim gridUpdateStarted As Boolean = False + Dim viewUpdateStarted As Boolean = False + Try FRONTEND_ACTION = "Load_single_Profile" Load_Profiles_for_User() GridControlWorkflows_Visible() - Dim expression As String - expression = "GUID = " & CURRENT_CLICKED_PROFILE_ID - Dim TEMP_TABLE = CURR_DT_VWPM_PROFILE_ACTIVE - Dim foundRows() As DataRow - foundRows = TEMP_TABLE.Select(expression) - Dim result = 0 - For i = 0 To foundRows.GetUpperBound(0) - result += 1 - Next - - If result = 1 Then - - - Dim oSQL = foundRows(0)("SQL_VIEW") - - oSQL = clsPatterns.ReplaceInternalValues(oSQL) - oSQL = clsPatterns.ReplaceUserValues(oSQL) - oSQL = oSQL.Replace("@USER_ID", USER_ID) - oSQL = oSQL.Replace("@USERNAME", USER_USERNAME) - oSQL = oSQL.Replace("@MACHINE_NAME", System.Environment.MachineName) - oSQL = oSQL.Replace("@DATE", Now.ToShortDateString) - oSQL = oSQL.Replace("@PROFILE_ID", CURRENT_CLICKED_PROFILE_ID) + Dim expression As String = "GUID = " & CURRENT_CLICKED_PROFILE_ID + Dim foundRow As DataRow = CURR_DT_VWPM_PROFILE_ACTIVE.Select(expression).FirstOrDefault() + If foundRow Is Nothing Then + Exit Function + End If - DT_CURR_WF_ITEMS = Await DatabaseFallback.GetDatatableECMAsync(oSQL) - If ForceReload = True Then - LOGGER.Info("ForceReload is true!") - End If - If Not IsNothing(DT_CURR_WF_ITEMS) Then - Dim oADDED = GET_LAST_ADDED(DT_CURR_WF_ITEMS) - Dim oChanged = GET_LAST_CHANGED(DT_CURR_WF_ITEMS) - Dim oCOUNT = DT_CURR_WF_ITEMS.Rows.Count - If oADDED = OVERVIEW_ADDED_WHEN And oChanged = OVERVIEW_CHANGED_WHEN And OVERVIEW_COUNT = oCOUNT Then - If ForceReload = False Then - LOGGER.Info("No changes on OverviewHash - so exit Refresh") - Exit Function - End If + If GridControlWorkflows.Visible Then + GridControlWorkflows.BeginUpdate() + gridUpdateStarted = True + GridViewWorkflows.BeginUpdate() + viewUpdateStarted = True + End If - Else - OVERVIEW_ADDED_WHEN = oADDED - OVERVIEW_CHANGED_WHEN = oChanged - OVERVIEW_COUNT = oCOUNT - End If + Dim oSQL = foundRow.Item("SQL_VIEW") + oSQL = clsPatterns.ReplaceInternalValues(oSQL) + oSQL = clsPatterns.ReplaceUserValues(oSQL) + oSQL = oSQL.Replace("@USER_ID", USER_ID) + oSQL = oSQL.Replace("@USERNAME", USER_USERNAME) + oSQL = oSQL.Replace("@MACHINE_NAME", System.Environment.MachineName) + oSQL = oSQL.Replace("@DATE", Now.ToShortDateString) + oSQL = oSQL.Replace("@PROFILE_ID", CURRENT_CLICKED_PROFILE_ID) - If DT_CURR_WF_ITEMS.Rows.Count = 0 Then - NO_WORKFLOWITEMS = True - lblCaptionMainGrid.Text = String.Format(S.Aktuell_keine_Workflowdaten_vorhanden___0_, CURRENT_CLICKED_PROFILE_TITLE) - GridControlWorkflows.Visible = False - bindsourcegrid.DataSource = Nothing - GridControlWorkflows.DataSource = Nothing - Else - NO_WORKFLOWITEMS = False + DT_CURR_WF_ITEMS = Await DatabaseFallback.GetDatatableECMAsync(oSQL) - lblCaptionMainGrid.Text = CURRENT_CLICKED_PROFILE_TITLE - End If - Create_Basic_View() + If IsNothing(DT_CURR_WF_ITEMS) Then + Exit Function + End If - RestoreLayout() + Dim oADDED = GET_LAST_ADDED(DT_CURR_WF_ITEMS) + Dim oChanged = GET_LAST_CHANGED(DT_CURR_WF_ITEMS) + Dim oCOUNT = DT_CURR_WF_ITEMS.Rows.Count + If ForceReload = False Then + If oADDED = OVERVIEW_ADDED_WHEN And oChanged = OVERVIEW_CHANGED_WHEN And OVERVIEW_COUNT = oCOUNT Then + Exit Function End If + OVERVIEW_ADDED_WHEN = oADDED + OVERVIEW_CHANGED_WHEN = oChanged + OVERVIEW_COUNT = oCOUNT + End If + If DT_CURR_WF_ITEMS.Rows.Count = 0 Then + NO_WORKFLOWITEMS = True + lblCaptionMainGrid.Text = String.Format(S.Aktuell_keine_Workflowdaten_vorhanden___0_, CURRENT_CLICKED_PROFILE_TITLE) + GridControlWorkflows.Visible = False + bindsourcegrid.DataSource = Nothing + GridControlWorkflows.DataSource = Nothing + Exit Function End If + NO_WORKFLOWITEMS = False + lblCaptionMainGrid.Text = CURRENT_CLICKED_PROFILE_TITLE + + Create_Basic_View() + RestoreLayout() + Catch ex As Exception LOGGER.Error(ex) LOGGER.Info("Load_single_Profile - Error: " & ex.Message) + Finally + If viewUpdateStarted Then + GridViewWorkflows.EndUpdate() + End If + If gridUpdateStarted Then + GridControlWorkflows.EndUpdate() + End If + FRONTEND_ACTION = FA_NONE End Try - FRONTEND_ACTION = FA_NONE End Function Sub Create_Basic_View() Try @@ -1918,6 +1922,11 @@ Public Class frmMain End Sub Async Function Load_Grid_Overview(pFormLoad As Boolean, pForceReload As Boolean, pNavbarClick As Boolean) As Tasks.Task Dim oStopWatch As New RefreshHelper.SW("Load_Grid_Overview(LGO)") + Dim gridUpdateStarted As Boolean = False + Dim viewUpdateStarted As Boolean = False + Dim layoutRestored As Boolean = False + Dim resetLayoutTriggered As Boolean = False + GridControlWorkflows_Visible() GRID_LOAD_TYPE = "OVERVIEW" CURRENT_CLICKED_PROFILE_ID = 0 @@ -1931,22 +1940,25 @@ Public Class frmMain bsiMessage.Caption = "NO PROFILES FOR USER" bsiMessage.ItemAppearance.Normal.BackColor = Color.Red bsiMessage.ItemAppearance.Normal.ForeColor = Color.Black - If GridControlWorkflows.Visible = True Then - GridControlWorkflows.Visible = False - End If - oStopWatch.Done() + GridControlWorkflows.Visible = False Exit Function End If + + If GridControlWorkflows.Visible Then + GridControlWorkflows.BeginUpdate() + gridUpdateStarted = True + GridViewWorkflows.BeginUpdate() + viewUpdateStarted = True + End If + Dim oStopWatch1 As New RefreshHelper.SW("LGO#Load_Profiles_for_User") Load_Profiles_for_User() oStopWatch1.Done() - 'ClassInit.InitBasics() + Dim oStopWatch2 As New RefreshHelper.SW("LGO#build CURR_DT_OVERVIEW") Dim oSQLOverview = BASEDATA_DT_CONFIG.Rows(0).Item("SQL_PROFILE_MAIN_VIEW") If IsDBNull(oSQLOverview) Then bsiMessage.Caption = "No SQL_PROFILE_MAIN_VIEW in Baseconfig" - oStopWatch.Done() - oStopWatch2.Done() Exit Function End If If oSQLOverview.ToString.Contains("GROUP_TEXT") = False Then @@ -1961,15 +1973,12 @@ Public Class frmMain GridViewWorkflows.Columns.Clear() Catch ex As Exception LOGGER.Error(ex) - End Try - Exit Function End If oSQLOverview = clsPatterns.ReplaceInternalValues(oSQLOverview) oSQLOverview = clsPatterns.ReplaceUserValues(oSQLOverview) - oSQLOverview = oSQLOverview.Replace("@USER_ID", USER_ID) oSQLOverview = oSQLOverview.Replace("@USERNAME", USER_USERNAME) oSQLOverview = oSQLOverview.Replace("@MACHINE_NAME", System.Environment.MachineName) @@ -1979,205 +1988,126 @@ Public Class frmMain DT_CURR_WF_ITEMS = Await DatabaseFallback.GetDatatableECMAsync(oSQLOverview) oStopWatch2.Done() - If Not IsNothing(DT_CURR_WF_ITEMS) Then - LOGGER.Debug($"Datatable CURR_DT_OVERVIEW loaded: {DT_CURR_WF_ITEMS.Rows.Count} rows") - If GridControlWorkflows.Visible = False Then - GridControlWorkflows.Visible = True - End If - - Dim oADDED = GET_LAST_ADDED(DT_CURR_WF_ITEMS) - Dim oChanged = GET_LAST_CHANGED(DT_CURR_WF_ITEMS) - Dim oCOUNT = DT_CURR_WF_ITEMS.Rows.Count - If pForceReload = False Then - If oADDED = OVERVIEW_ADDED_WHEN And oChanged = OVERVIEW_CHANGED_WHEN And oCOUNT = OVERVIEW_COUNT Then - If pForceReload = False Then - LOGGER.Debug("No changes on OverviewHash - so exit Load_Grid_overview") - Exit Function - End If - Else - LOGGER.Info("Differences on OverviewHash") - LOGGER.Debug($"oADDED/OVERVIEW_ADDED_WHEN: {oADDED}/{OVERVIEW_ADDED_WHEN}#oADDED/OVERVIEW_ADDED_WHEN: {oChanged}/{OVERVIEW_CHANGED_WHEN}") - OVERVIEW_ADDED_WHEN = oADDED - OVERVIEW_CHANGED_WHEN = oChanged - OVERVIEW_COUNT = oCOUNT - End If - End If + If IsNothing(DT_CURR_WF_ITEMS) Then + NO_WORKFLOWITEMS = True + GridControlWorkflows.Visible = False + GridControlWorkflows.DataSource = Nothing + Try + GridViewWorkflows.Columns.Clear() + Catch ex As Exception + LOGGER.Error(ex) + End Try + Exit Function + End If - NO_WORKFLOWITEMS = False - If DT_CURR_WF_ITEMS.Rows.Count = 0 Then - NO_WORKFLOWITEMS = True - lblCaptionMainGrid.Text = String.Format(S.Aktuell_keine_Workflowdaten_vorhanden___0_, "") + LOGGER.Debug($"Datatable CURR_DT_OVERVIEW loaded: {DT_CURR_WF_ITEMS.Rows.Count} rows") - GridControlWorkflows.Visible = False - bindsourcegrid.DataSource = Nothing - GridControlWorkflows.DataSource = Nothing - Try - GridViewWorkflows.Columns.Clear() - Catch ex As Exception - LOGGER.Error(ex) - End Try + Dim oADDED = GET_LAST_ADDED(DT_CURR_WF_ITEMS) + Dim oChanged = GET_LAST_CHANGED(DT_CURR_WF_ITEMS) + Dim oCOUNT = DT_CURR_WF_ITEMS.Rows.Count + If pForceReload = False Then + If oADDED = OVERVIEW_ADDED_WHEN And oChanged = OVERVIEW_CHANGED_WHEN And oCOUNT = OVERVIEW_COUNT Then + LOGGER.Debug("No changes on OverviewHash - so exit Load_Grid_overview") Exit Function - End If - - - GridControlWorkflows.Visible = True - If TL_ICON = True Then - 'Spalte für Status Icon erstellen - Dim columnStateIcon As New DataColumn() - columnStateIcon.DataType = GetType(Image) - columnStateIcon.ColumnName = "ICON" - columnStateIcon.Caption = "" - DT_CURR_WF_ITEMS.Columns.Add(columnStateIcon) - End If - RedDocuments = 0 - YellowDocuments = 0 - GreenDocuments = 0 - If TL_ICON = True Then - For Each row As DataRow In DT_CURR_WF_ITEMS.Rows - Dim State As Integer = row.Item("TL_STATE") - Select Case State - Case 1 - RedDocuments += 1 - row.Item("ICON") = My.Resources.bullet_red - Case 2 - YellowDocuments += 1 - row.Item("ICON") = My.Resources.bullet_orange - Case 3 - GreenDocuments += 1 - row.Item("ICON") = My.Resources.bullet_green - End Select - Next - End If - - 'If IDB_ACTIVE = True Then - ' ' Spalte für Conversation erstellen - ' Dim columnConvIcon As New DataColumn() - ' columnConvIcon.DataType = GetType(Image) - ' columnConvIcon.ColumnName = "CONVERSATION" - ' columnConvIcon.Caption = "" - ' DT_CURR_WF_ITEMS.Columns.Add(columnConvIcon) - ' For Each oRow As DataRow In DT_CURR_WF_ITEMS.Rows - ' Try - ' Dim oCONVYN As Boolean - ' Try - ' oCONVYN = oRow.Item("CONV_YN") - ' Catch ex As Exception - ' LOGGER.Warn("Load_Grid_Overview - Column CONV_YN obviously is not part of CURR_DT_OVERVIEW") - ' Exit For - ' End Try - ' Select Case oCONVYN - ' Case True - ' oRow.Item("CONVERSATION") = My.Resources.conversation - ' End Select - ' Catch ex As Exception - ' LOGGER.Warn("Load_Grid_Overview - Column CONVERSATION obviously is not part of GridViewWorkflows") - ' Exit For - ' End Try - - ' Next - 'End If - - - bindsourcegrid.DataSource = DT_CURR_WF_ITEMS - GridControlWorkflows.DataSource = bindsourcegrid - GridControlWorkflows.ForceInitialize() - - Create_View_Caption() - Dim oColNotPartofLayout As Boolean - oColNotPartofLayout = False - 'GridControlDocRow.ForceInitialize() - ' GridControl1.DataSource = CURR_DT_PROFILEGRID - 'If pFormLoad = True Then - ' If IDB_ACTIVE = True Then - ' oColNotPartofLayout = Column_inGridViewLayout("CONV_YN") - ' End If - 'End If - If pNavbarClick = False Then - If pForceReload = True And (GridLayoutChanged() = True Or oColNotPartofLayout = True) Then - 'ResetLayout() - 'SaveGridLayout() - LOGGER.Debug("Now GridLayout_Reset..") - Await GridLayout_Reset(False) - Else - If oColNotPartofLayout = False Then - RestoreLayout() - End If - End If Else - RestoreLayout() + OVERVIEW_ADDED_WHEN = oADDED + OVERVIEW_CHANGED_WHEN = oChanged + OVERVIEW_COUNT = oCOUNT End If + End If - + NO_WORKFLOWITEMS = (DT_CURR_WF_ITEMS.Rows.Count = 0) + If NO_WORKFLOWITEMS Then + lblCaptionMainGrid.Text = String.Format(S.Aktuell_keine_Workflowdaten_vorhanden___0_, "") + GridControlWorkflows.Visible = False + bindsourcegrid.DataSource = Nothing + GridControlWorkflows.DataSource = Nothing Try - If pForceReload = True And (GridLayoutChanged() = True Or oColNotPartofLayout = True) Then - Create_GroupBy_Parts() - COLUMNS_INVISIBLE() - End If - - - - - If TL_ICON = True Then - Try - GridViewWorkflows.Columns.Item("ICON").MaxWidth = 24 - GridViewWorkflows.Columns.Item("ICON").MinWidth = 24 - GridViewWorkflows.Columns.Item("ICON").AppearanceCell.BackColor = Color.White - GridViewWorkflows.Columns.Item("ICON").Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Left - Catch ex As Exception - - End Try - - End If + GridViewWorkflows.Columns.Clear() + Catch ex As Exception + LOGGER.Error(ex) + End Try + Exit Function + End If + If TL_ICON = True AndAlso DT_CURR_WF_ITEMS.Columns.Contains("ICON") = False Then + Dim columnStateIcon As New DataColumn() With { + .DataType = GetType(Image), + .ColumnName = "ICON", + .Caption = "" + } + DT_CURR_WF_ITEMS.Columns.Add(columnStateIcon) + End If - LOGGER.Debug("GridViewWorkflows.Columns loaded...") - Try - Dim oReducedColName = LAST_EDITED_COLUMN.Replace("[", "") - oReducedColName = oReducedColName.Replace("]", "") - 'If Not IsNothing(GridViewWorkflows.Columns(oReducedColName)) Then - ' GridViewWorkflows.Columns(oReducedColName).DisplayFormat.FormatType = FormatType.DateTime - ' GridViewWorkflows.Columns(oReducedColName).DisplayFormat.FormatString = "dd.MM.yyyy HH:MM:ss" - 'ElseIf Not IsNothing(GridViewWorkflows.Columns("Zuletzt bearbeitet")) Then - ' GridViewWorkflows.Columns("Zuletzt bearbeitet").DisplayFormat.FormatType = FormatType.DateTime - ' GridViewWorkflows.Columns("Zuletzt bearbeitet").DisplayFormat.FormatString = "dd.MM.yyyy HH:MM:ss" - 'End If + RedDocuments = 0 + YellowDocuments = 0 + GreenDocuments = 0 + If TL_ICON = True Then + For Each row As DataRow In DT_CURR_WF_ITEMS.Rows + Dim State As Integer = row.Item("TL_STATE") + Select Case State + Case 1 + RedDocuments += 1 + row.Item("ICON") = My.Resources.bullet_red + Case 2 + YellowDocuments += 1 + row.Item("ICON") = My.Resources.bullet_orange + Case 3 + GreenDocuments += 1 + row.Item("ICON") = My.Resources.bullet_green + End Select + Next + End If - Catch ex As Exception - LOGGER.Warn("(Warning LoadGridOverview)Column [Last edited] or [Zuletzt bearbeitet] not part of OverviewSQL") + bindsourcegrid.DataSource = DT_CURR_WF_ITEMS + GridControlWorkflows.DataSource = bindsourcegrid + GridControlWorkflows.ForceInitialize() - End Try + Create_View_Caption() - LOGGER.Debug("finished Formatting Grid!") - Catch ex As Exception - LOGGER.Error(ex) - LOGGER.Info("Unexpected Error in Formatting Grid: " & ex.Message) - End Try - If GridViewWorkflows.Columns.Count <= 5 Then - LOGGER.Info("GridViewWorkflows.Columns.Count <= 2 - Reset_Gridlayout will be forced...", False) - Await Reset_GridLayout(pFormLoad) + Dim oColNotPartofLayout As Boolean = False + If pNavbarClick = False Then + If pForceReload = True And (GridLayoutChanged() = True Or oColNotPartofLayout = True) Then + LOGGER.Debug("Now GridLayout_Reset..") + Await GridLayout_Reset(False) + resetLayoutTriggered = True + ElseIf oColNotPartofLayout = False Then + RestoreLayout() + layoutRestored = True End If Else - NO_WORKFLOWITEMS = True - GridControlWorkflows.Visible = False - 'BindingNavigator1.Dock = DockStyle.None - - - GridControlWorkflows.DataSource = Nothing + RestoreLayout() + layoutRestored = True + End If + If pForceReload = True And (GridLayoutChanged() = True Or oColNotPartofLayout = True) Then + Create_GroupBy_Parts() + End If + If TL_ICON = True Then Try - GridViewWorkflows.Columns.Clear() + GridViewWorkflows.Columns.Item("ICON").MaxWidth = 24 + GridViewWorkflows.Columns.Item("ICON").MinWidth = 24 + GridViewWorkflows.Columns.Item("ICON").AppearanceCell.BackColor = Color.White + GridViewWorkflows.Columns.Item("ICON").Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Left Catch ex As Exception - LOGGER.Error(ex) End Try End If - RestoreLayout() + If GridViewWorkflows.Columns.Count <= 5 Then + LOGGER.Info("GridViewWorkflows.Columns.Count <= 2 - Reset_Gridlayout will be forced...", False) + Await Reset_GridLayout(pFormLoad) + resetLayoutTriggered = True + End If - Try + If Not layoutRestored And Not resetLayoutTriggered Then + RestoreLayout() + End If - For Each oColumn As DevExpress.XtraGrid.Columns.GridColumn In GridViewWorkflows.Columns + COLUMNS_INVISIBLE() + Try + For Each oColumn As DevExpress.XtraGrid.Columns.GridColumn In GridViewWorkflows.Columns For Each oRow As DataRow In BASEDATA_TBDD_COLUMNS_FORMAT.Rows Dim colName = oRow("COLUMN_TITLE").ToString() @@ -2185,7 +2115,6 @@ Public Class frmMain Dim oSollFormatType = oRow("TYPE2FORMAT").ToString() If oSollFormatType = "DateTime" Then - If oColumn.ColumnType <> GetType(DateTime) Then oColumn.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime End If @@ -2205,11 +2134,17 @@ Public Class frmMain LOGGER.Warn("Fehler beim Anwenden der Formatierung aus TBDD_COLUMNS_FORMAT: " & ex.Message) End Try - oStopWatch.Done() - Catch ex As Exception LOGGER.Error(ex) LOGGER.Info("Load_Grid_Overview - Fehler: " & ex.Message) + Finally + If viewUpdateStarted Then + GridViewWorkflows.EndUpdate() + End If + If gridUpdateStarted Then + GridControlWorkflows.EndUpdate() + End If + oStopWatch.Done() End Try End Function Private Sub tsmiValidationProfil_Click(sender As Object, e As EventArgs) Handles tsmiValidationProfil.Click