Common/DocumentResultList: Fix reloading gridcontrol by using delegate in RefreshResults call

This commit is contained in:
Jonathan Jenne 2022-02-14 15:53:42 +01:00
parent 37f3dc7d4f
commit 8f72088a87
4 changed files with 66 additions and 49 deletions

View File

@ -1,4 +1,7 @@
DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.ProgressBarControl, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraLayout.LayoutControl, DevExpress.XtraLayout.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.Repository.RepositoryItemComboBox, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@ -113,7 +113,7 @@ Partial Class frmDocumentResultList
'
Me.SplitContainerControl1.Panel2.Controls.Add(Me.SplitContainerControl2)
resources.ApplyResources(Me.SplitContainerControl1.Panel2, "SplitContainerControl1.Panel2")
Me.SplitContainerControl1.SplitterPosition = 382
Me.SplitContainerControl1.SplitterPosition = 389
'
'GridControl1
'
@ -296,12 +296,12 @@ Partial Class frmDocumentResultList
Me.MenuItemPropertiesZooFlow.ImageOptions.SvgImage = Global.DigitalData.GUIs.Common.My.Resources.Resources.editcolors
Me.MenuItemPropertiesZooFlow.Name = "MenuItemPropertiesZooFlow"
'
'BarButtonItem1
'ButtonRefresh
'
resources.ApplyResources(Me.ButtonRefresh, "BarButtonItem1")
resources.ApplyResources(Me.ButtonRefresh, "ButtonRefresh")
Me.ButtonRefresh.Id = 29
Me.ButtonRefresh.ImageOptions.SvgImage = Global.DigitalData.GUIs.Common.My.Resources.Resources.refreshallpivottable
Me.ButtonRefresh.Name = "BarButtonItem1"
Me.ButtonRefresh.Name = "ButtonRefresh"
'
'RibbonPage1
'

View File

@ -426,7 +426,7 @@
<data name="MenuItemPropertiesZooFlow.Caption" xml:space="preserve">
<value>Eigenschaften</value>
</data>
<data name="BarButtonItem1.Caption" xml:space="preserve">
<data name="ButtonRefresh.Caption" xml:space="preserve">
<value>Ergebnisse aktualisieren</value>
</data>
<data name="RibbonControl.Location" type="System.Drawing.Point, System.Drawing">
@ -455,10 +455,10 @@
<value>1189, 132</value>
</data>
<data name="RibbonStatusBar.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 647</value>
<value>0, 649</value>
</data>
<data name="RibbonStatusBar.Size" type="System.Drawing.Size, System.Drawing">
<value>1189, 24</value>
<value>1189, 22</value>
</data>
<data name="&gt;&gt;RibbonStatusBar.Name" xml:space="preserve">
<value>RibbonStatusBar</value>
@ -485,7 +485,7 @@
<value>2</value>
</data>
<data name="GridControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>382, 511</value>
<value>389, 513</value>
</data>
<data name="GridControl1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -539,7 +539,7 @@
<value>GridBand2</value>
</data>
<data name="GridControl2.Size" type="System.Drawing.Size, System.Drawing">
<value>370, 223</value>
<value>363, 223</value>
</data>
<data name="GridControl2.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -587,7 +587,7 @@
<value>GridBand3</value>
</data>
<data name="GridControl3.Size" type="System.Drawing.Size, System.Drawing">
<value>370, 278</value>
<value>363, 280</value>
</data>
<data name="GridControl3.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -620,7 +620,7 @@
<value>1</value>
</data>
<data name="SplitContainerControl2.Size" type="System.Drawing.Size, System.Drawing">
<value>370, 511</value>
<value>363, 513</value>
</data>
<data name="SplitContainerControl2.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -656,7 +656,7 @@
<value>1</value>
</data>
<data name="SplitContainerControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>762, 511</value>
<value>762, 513</value>
</data>
<data name="SplitContainerControl1.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@ -704,7 +704,7 @@
<value>0, 0</value>
</data>
<data name="DocumentViewer1.Size" type="System.Drawing.Size, System.Drawing">
<value>413, 511</value>
<value>413, 513</value>
</data>
<data name="DocumentViewer1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -737,7 +737,7 @@
<value>1</value>
</data>
<data name="SplitContainerControl3.Size" type="System.Drawing.Size, System.Drawing">
<value>1189, 515</value>
<value>1189, 517</value>
</data>
<data name="SplitContainerControl3.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
@ -978,10 +978,10 @@
<data name="&gt;&gt;MenuItemPropertiesZooFlow.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;BarButtonItem1.Name" xml:space="preserve">
<value>BarButtonItem1</value>
<data name="&gt;&gt;ButtonRefresh.Name" xml:space="preserve">
<value>ButtonRefresh</value>
</data>
<data name="&gt;&gt;BarButtonItem1.Type" xml:space="preserve">
<data name="&gt;&gt;ButtonRefresh.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;RibbonPage1.Name" xml:space="preserve">

View File

@ -77,7 +77,8 @@ Public Class frmDocumentResultList
Public Event NeedsRefresh As EventHandler(Of Integer) Implements IResultForm.NeedsRefresh
Public Event ResultsRefreshed As EventHandler(Of List(Of DocumentResultList.DocumentResult))
Public Delegate Sub SetDatasourceCallback(pDatatable As DataTable)
Private Delegate Sub DatasourceDelegate(View As GridView, Datasource As Object)
Private Delegate Function RefreshResultsDelegate(Results As IEnumerable(Of BaseResult)) As Boolean
Public Sub New(pLogConfig As LogConfig, pEnvironment As Environment, pParams As DocumentResultList.Params)
' Dieser Aufruf ist für den Designer erforderlich.
@ -325,7 +326,7 @@ Public Class frmDocumentResultList
If IsNothing(oObjectId) Then
MsgBox($"Beim Speichern der Datei '{oDisplayName}' Fehler ist ein Fehler aufgetreten!", MsgBoxStyle.Critical, Text)
Else
MsgBox($"Die Datei '{oDisplayName}' wurde erfolgreich gespeichert!", MsgBoxStyle.Information, Text)
'MsgBox($"Die Datei '{oDisplayName}' wurde erfolgreich gespeichert!", MsgBoxStyle.Information, Text)
RaiseEvent NeedsRefresh(Me, Params.ProfileGuid)
End If
End Function
@ -372,8 +373,16 @@ Public Class frmDocumentResultList
Public Function RefreshResults(pResults As IEnumerable(Of BaseResult)) As Boolean Implements IResultForm.RefreshResults
' This is needed to update the grid from another form like frmMatch
' Another form means another thread, so we need a delegate here
If InvokeRequired Then
Dim oDelegate As New RefreshResultsDelegate(AddressOf RefreshResults)
Return GridControl1.Invoke(oDelegate, pResults)
Else
_IsLoading = True
Try
_ResultLists = pResults
UpdateTotalResults()
UpdateGridData()
@ -381,14 +390,15 @@ Public Class frmDocumentResultList
Catch ex As Exception
Logger.Error(ex)
MessageBox.Show("Error while loading results:" & vbNewLine & vbNewLine & ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
MessageBox.Show("Error while refreshing results:" & vbNewLine & vbNewLine & ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
Finally
_IsLoading = False
End Try
End If
End Function
Private Sub LoadGridData(Result As DocumentResultList.DocumentResult)
Private Sub LoadGridData(View As GridView, Result As DocumentResultList.DocumentResult)
If Result.Datatable.Columns.Contains(COLUMN_DOCID) = False Then
Throw New ApplicationException($"Datatable is missing DocId Column [{COLUMN_DOCID}] for search {Result.Title}!")
End If
@ -397,22 +407,26 @@ Public Class frmDocumentResultList
Throw New ApplicationException($"Datatable is missing Filepath Column [{COLUMN_FILEPATH}] for search {Result.Title}!")
End If
' This is needed to update the grid from another form like frmMatch
' Another form means another thread, so we need a delegate here
If GridControl1.InvokeRequired Then
Dim oCallback As New SetDatasourceCallback(AddressOf SetGridDataSource)
Invoke(oCallback, Result.Datatable)
Else
SetGridDataSource(Result.Datatable)
End If
SetGridDataSource(View, Result.Datatable)
End Sub
Private Sub SetGridDataSource(pTable As DataTable)
GridControl1.DataSource = Nothing
GridControl1.DataSource = pTable
Private Sub SetGridDataSource(pView As GridView, pTable As DataTable)
Dim oSavedRowHandle As Integer = pView.FocusedRowHandle
pView.BeginDataUpdate()
Try
pView.FocusedRowHandle = GridControl.AutoFilterRowHandle
pView.GridControl.DataSource = Nothing
pView.GridControl.DataSource = pTable
pView.FocusedRowHandle = oSavedRowHandle
Finally
pView.EndDataUpdate()
End Try
End Sub
Private Sub UpdateGridData()
' Load Grids
For oIndex = 0 To _ResultLists.Count - 1
@ -420,7 +434,7 @@ Public Class frmDocumentResultList
Case 0
Dim oResult As DocumentResultList.DocumentResult = _ResultLists.Item(0)
LoadGridData(oResult)
LoadGridData(GridView1, oResult)
CreateDocumentGrid(GridView1, oResult)
RestoreLayout(GridView1)
UpdateGridHeader(_ResultLists, oIndex, oResult.Datatable.Rows.Count)
@ -428,7 +442,7 @@ Public Class frmDocumentResultList
Case 1
Dim oResult As DocumentResultList.DocumentResult = _ResultLists.Item(1)
LoadGridData(oResult)
LoadGridData(GridView2, oResult)
CreateDocumentGrid(GridView2, oResult)
RestoreLayout(GridView2)
UpdateGridHeader(_ResultLists, oIndex, oResult.Datatable.Rows.Count)
@ -436,7 +450,7 @@ Public Class frmDocumentResultList
Case 2
Dim oResult As DocumentResultList.DocumentResult = _ResultLists.Item(2)
LoadGridData(oResult)
LoadGridData(GridView3, oResult)
CreateDocumentGrid(GridView3, oResult)
RestoreLayout(GridView3)
UpdateGridHeader(_ResultLists, oIndex, oResult.Datatable.Rows.Count)