288 lines
9.4 KiB
VB.net
288 lines
9.4 KiB
VB.net
Imports System
|
|
Imports System.Collections
|
|
Imports DevExpress.XtraGrid
|
|
Imports DevExpress.Utils
|
|
Imports DevExpress.XtraGrid.Columns
|
|
Imports DevExpress.XtraGrid.Views.Grid
|
|
Imports DigitalData.Modules.Logging
|
|
|
|
Public Class RefreshHelper
|
|
'<Serializable>
|
|
'Public Structure RowInfo
|
|
' Public Id As Object
|
|
' Public Level As Integer
|
|
'End Structure
|
|
|
|
''' <summary>
|
|
''' Saves information about the current row, like the level and row handle
|
|
''' </summary>
|
|
<Serializable>
|
|
Public Class RowInfo
|
|
Public Property Id As Object
|
|
Public Property Level As Integer
|
|
Public Property Handle As Integer
|
|
End Class
|
|
|
|
Private Property _View As GridView
|
|
Private Property _KeyFieldName As String
|
|
Private Property _Logger As Logger
|
|
|
|
Private Property _VisibleRowIndex As Integer = -1
|
|
|
|
Private ReadOnly Property ExpansionViewInfoList() As New List(Of RowInfo)
|
|
Private ReadOnly Property SelectionViewInfoList() As New List(Of RowInfo)
|
|
Private ReadOnly Property ExpandedMasterRowList() As New List(Of Object)
|
|
|
|
Public Sub New(pLogConfig As LogConfig, pView As GridView, pKeyFieldName As String)
|
|
_View = pView
|
|
_KeyFieldName = pKeyFieldName
|
|
_Logger = pLogConfig.GetLogger()
|
|
End Sub
|
|
|
|
Public Sub SaveViewInfo()
|
|
Try
|
|
SaveExpandedMasterRows()
|
|
SaveExpansionViewInfo()
|
|
SaveSelectionViewInfo()
|
|
SaveVisibleIndex()
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Sub LoadViewInfo()
|
|
Try
|
|
LoadExpandedMasterRows()
|
|
LoadExpansionViewInfo()
|
|
LoadSelectionViewInfo()
|
|
LoadVisibleIndex()
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Function FindParentRowHandle(pRowInfo As RowInfo, oRowHandle As Integer) As Integer
|
|
Dim oParentRowHandle As Integer = _View.GetParentRowHandle(oRowHandle)
|
|
|
|
' Fixes endless loop when parent row handle is below zero
|
|
If oParentRowHandle < 0 Then
|
|
Return oParentRowHandle
|
|
End If
|
|
|
|
Do While _View.GetRowLevel(oParentRowHandle) <> pRowInfo.Level
|
|
oParentRowHandle = _View.GetParentRowHandle(oParentRowHandle)
|
|
Loop
|
|
|
|
Return oParentRowHandle
|
|
End Function
|
|
|
|
Private Function GetKeyColumn() As GridColumn
|
|
Return _View.Columns(_KeyFieldName)
|
|
End Function
|
|
|
|
Private Function GetKeyColumnValue(pRowHandle As Integer) As Object
|
|
Return _View.GetRowCellValue(pRowHandle, GetKeyColumn())
|
|
End Function
|
|
|
|
Private Sub ExpandRowByRowInfo(pRowInfo As RowInfo)
|
|
'Dim oDataRowHandle As Integer = _View.LocateByValue(0, GetKeyColumn(), rowInfo.Id)
|
|
Dim oDataRowHandle As Integer = pRowInfo.Handle
|
|
|
|
If oDataRowHandle <> GridControl.InvalidRowHandle Then
|
|
Dim parentRowHandle As Integer = FindParentRowHandle(pRowInfo, oDataRowHandle)
|
|
_View.SetRowExpanded(parentRowHandle, True, False)
|
|
End If
|
|
End Sub
|
|
|
|
Private Function GetRowHandleToSelect(pRowInfo As RowInfo) As Integer
|
|
'Dim oDataRowHandle As Integer = _View.LocateByValue(0, GetKeyColumn(), rowInfo.Id)
|
|
Dim oDataRowHandle As Integer = pRowInfo.Handle
|
|
|
|
If oDataRowHandle <> GridControl.InvalidRowHandle Then
|
|
If _View.GetRowLevel(oDataRowHandle) <> pRowInfo.Level Then
|
|
Return FindParentRowHandle(pRowInfo, oDataRowHandle)
|
|
End If
|
|
End If
|
|
Return oDataRowHandle
|
|
End Function
|
|
|
|
Private Sub SelectRowByRowInfo(pRowInfo As RowInfo, pIsFocused As Boolean)
|
|
If pIsFocused Then
|
|
_View.FocusedRowHandle = GetRowHandleToSelect(pRowInfo)
|
|
Else
|
|
_View.SelectRow(GetRowHandleToSelect(pRowInfo))
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub SaveSelectionViewInfo()
|
|
SelectionViewInfoList.Clear()
|
|
|
|
Dim oSelectionArray() As Integer = _View.GetSelectedRows()
|
|
If oSelectionArray IsNot Nothing Then ' otherwise we have a single focused but not selected row
|
|
Dim oRowInfo As New RowInfo
|
|
|
|
For oIndex As Integer = 0 To oSelectionArray.Length - 1
|
|
Dim oDataRowHandle As Integer = oSelectionArray(oIndex)
|
|
oRowInfo.Level = _View.GetRowLevel(oDataRowHandle)
|
|
If oDataRowHandle < 0 Then ' group row
|
|
oDataRowHandle = _View.GetDataRowHandleByGroupRowHandle(oDataRowHandle)
|
|
End If
|
|
|
|
oRowInfo.Id = GetKeyColumnValue(oDataRowHandle)
|
|
oRowInfo.Handle = oDataRowHandle
|
|
|
|
SelectionViewInfoList.Add(oRowInfo)
|
|
Next
|
|
Else
|
|
SelectionViewInfoList.Add(New RowInfo With {
|
|
.Id = GetKeyColumnValue(_View.FocusedRowHandle),
|
|
.Level = _View.GetRowLevel(_View.FocusedRowHandle),
|
|
.Handle = _View.FocusedRowHandle
|
|
})
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub SaveExpansionViewInfo()
|
|
' Dont do anything if the current view does not have any grouped columns
|
|
If _View.GroupedColumns.Count = 0 Then
|
|
Return
|
|
End If
|
|
|
|
' Clear the list first
|
|
ExpansionViewInfoList.Clear()
|
|
|
|
For oIndex As Integer = -1 To Integer.MinValue + 1 Step -1
|
|
If Not _View.IsValidRowHandle(oIndex) Then
|
|
Exit For
|
|
End If
|
|
If _View.GetRowExpanded(oIndex) Then
|
|
Dim oDataRowHandle As Integer = _View.GetDataRowHandleByGroupRowHandle(oIndex)
|
|
|
|
ExpansionViewInfoList.Add(New RowInfo With {
|
|
.Id = GetKeyColumnValue(oDataRowHandle),
|
|
.Level = _View.GetRowLevel(oIndex),
|
|
.Handle = oDataRowHandle
|
|
})
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub SaveExpandedMasterRows()
|
|
If _View.GridControl.Views.Count = 1 Then
|
|
Return
|
|
End If
|
|
|
|
ExpandedMasterRowList.Clear()
|
|
|
|
For oIndex As Integer = 0 To _View.DataRowCount - 1
|
|
If _View.GetMasterRowExpanded(oIndex) Then
|
|
ExpandedMasterRowList.Add(GetKeyColumnValue(oIndex))
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub SaveVisibleIndex()
|
|
_VisibleRowIndex = _View.GetVisibleIndex(_View.FocusedRowHandle) - _View.TopRowIndex
|
|
End Sub
|
|
|
|
Private Sub LoadVisibleIndex()
|
|
Try
|
|
_View.MakeRowVisible(_View.FocusedRowHandle, True)
|
|
_View.TopRowIndex = _View.GetVisibleIndex(_View.FocusedRowHandle) - _VisibleRowIndex
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub LoadSelectionViewInfo()
|
|
_View.BeginSelection()
|
|
Try
|
|
_View.ClearSelection()
|
|
For i As Integer = 0 To SelectionViewInfoList.Count - 1
|
|
SelectRowByRowInfo(DirectCast(SelectionViewInfoList(i), RowInfo), i = SelectionViewInfoList.Count - 1)
|
|
Next i
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
Finally
|
|
_View.EndSelection()
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub LoadExpansionViewInfo()
|
|
If _View.GroupedColumns.Count = 0 Then
|
|
Return
|
|
End If
|
|
|
|
_View.BeginUpdate()
|
|
Try
|
|
_View.CollapseAllGroups()
|
|
For Each info As RowInfo In ExpansionViewInfoList
|
|
ExpandRowByRowInfo(info)
|
|
Next info
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
Finally
|
|
_View.EndUpdate()
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub LoadExpandedMasterRows()
|
|
_View.BeginUpdate()
|
|
Try
|
|
_View.CollapseAllDetails()
|
|
Dim oColumn As GridColumn = GetKeyColumn()
|
|
For oIndex As Integer = 0 To ExpandedMasterRowList.Count - 1
|
|
Dim oRowHandle As Integer = _View.LocateByValue(0, oColumn, ExpandedMasterRowList(oIndex))
|
|
_View.SetMasterRowExpanded(oRowHandle, True)
|
|
Next oIndex
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
Finally
|
|
_View.EndUpdate()
|
|
End Try
|
|
End Sub
|
|
|
|
|
|
|
|
Public Class SW
|
|
Public label As String
|
|
Public stopwatch As Stopwatch
|
|
|
|
Public Sub New(label As String)
|
|
Me.label = label
|
|
stopwatch = New Stopwatch()
|
|
stopwatch.Start()
|
|
End Sub
|
|
|
|
Public Function Done() As Long
|
|
If LOGCONFIG.Debug = False Then
|
|
Return 0
|
|
End If
|
|
|
|
stopwatch.Stop()
|
|
Dim ts As TimeSpan = stopwatch.Elapsed
|
|
|
|
Dim timespan_ = String.Format("{0:00}:{1:00}.{2:00}", ts.Minutes, ts.Seconds, ts.Milliseconds / 10)
|
|
If ts.Minutes > 0 Then
|
|
timespan_ = String.Format("{0:00}:{1:00}.{2:00}", ts.Minutes, ts.Seconds, ts.Milliseconds / 10)
|
|
ElseIf ts.Seconds > 0 And (ts.Minutes > 0) = False Then
|
|
timespan_ = String.Format("{0:00}.{1:00} seconds", ts.Seconds, ts.Milliseconds / 10)
|
|
ElseIf (ts.Seconds > 0) = False And ts.Milliseconds > 0 Then
|
|
timespan_ = String.Format("{0:00}.{1:00} seconds", ts.Seconds, ts.Milliseconds / 10)
|
|
End If
|
|
If timespan_ <> "00:00.00" Then
|
|
Dim message = String.Format("PerformanceWatch {0} || {1}", timespan_, label)
|
|
|
|
If LOGCONFIG.Debug = True Then
|
|
LOGGER.Debug(message)
|
|
End If
|
|
|
|
End If
|
|
Return stopwatch.ElapsedMilliseconds
|
|
End Function
|
|
|
|
|
|
End Class
|
|
End Class
|
|
|