Index: ActiviteitenOpvolging/ActiviteitenOpvolging/grids/IDataGridUserControl.vb =================================================================== diff -u -r1701 -r1702 --- ActiviteitenOpvolging/ActiviteitenOpvolging/grids/IDataGridUserControl.vb (.../IDataGridUserControl.vb) (revision 1701) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/grids/IDataGridUserControl.vb (.../IDataGridUserControl.vb) (revision 1702) @@ -1,12 +1,18 @@ Public Interface IDataGridUserControl ''' + ''' Access to the grid number. + ''' + ''' + ReadOnly Property GridNumber As Integer + + ''' ''' Clears the selection from the datagrid. ''' - sub RemoveSelection() + Sub RemoveSelection() ''' - ''' Access to the grid number. + ''' Refresh the data of the grid. ''' - ''' - ReadOnly Property GridNumber As Integer + ''' Whether or not it was successful + Function RefreshData() As Boolean End Interface Index: ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.Designer.vb =================================================================== diff -u -r1682 -r1702 --- ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.Designer.vb (.../ActiviteitenOpvolgingForm.Designer.vb) (revision 1682) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.Designer.vb (.../ActiviteitenOpvolgingForm.Designer.vb) (revision 1702) @@ -24,6 +24,9 @@ Private Sub InitializeComponent() Me.DatagridViewControlsFlowLayoutPanel = New System.Windows.Forms.FlowLayoutPanel() Me.GridLabel = New System.Windows.Forms.Label() + Me.RefreshButton = New System.Windows.Forms.Button() + Me.RefreshTimeLabel = New System.Windows.Forms.Label() + Me.RefreshFailedLabel = New System.Windows.Forms.Label() Me.SuspendLayout ' 'DatagridViewControlsFlowLayoutPanel @@ -47,11 +50,44 @@ Me.GridLabel.TabIndex = 2 Me.GridLabel.Text = "Grid label" ' + 'RefreshButton + ' + Me.RefreshButton.Location = New System.Drawing.Point(696, 9) + Me.RefreshButton.Name = "RefreshButton" + Me.RefreshButton.Size = New System.Drawing.Size(75, 23) + Me.RefreshButton.TabIndex = 3 + Me.RefreshButton.Text = "Refresh" + Me.RefreshButton.UseVisualStyleBackColor = true + ' + 'RefreshTimeLabel + ' + Me.RefreshTimeLabel.AutoSize = true + Me.RefreshTimeLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0,Byte)) + Me.RefreshTimeLabel.Location = New System.Drawing.Point(1082, 18) + Me.RefreshTimeLabel.Name = "RefreshTimeLabel" + Me.RefreshTimeLabel.Size = New System.Drawing.Size(0, 16) + Me.RefreshTimeLabel.TabIndex = 4 + ' + 'RefreshFailedLabel + ' + Me.RefreshFailedLabel.AutoSize = true + Me.RefreshFailedLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0,Byte)) + Me.RefreshFailedLabel.ForeColor = System.Drawing.Color.Maroon + Me.RefreshFailedLabel.Location = New System.Drawing.Point(848, 18) + Me.RefreshFailedLabel.Name = "RefreshFailedLabel" + Me.RefreshFailedLabel.Size = New System.Drawing.Size(228, 16) + Me.RefreshFailedLabel.TabIndex = 5 + Me.RefreshFailedLabel.Text = "Refresh failed. Latest refresh at:" + Me.RefreshFailedLabel.Visible = false + ' 'ActiviteitenOpvolgingForm ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(1264, 986) + Me.Controls.Add(Me.RefreshFailedLabel) + Me.Controls.Add(Me.RefreshTimeLabel) + Me.Controls.Add(Me.RefreshButton) Me.Controls.Add(Me.GridLabel) Me.Controls.Add(Me.DatagridViewControlsFlowLayoutPanel) Me.Name = "ActiviteitenOpvolgingForm" @@ -63,4 +99,7 @@ Friend WithEvents DatagridViewControlsFlowLayoutPanel As FlowLayoutPanel Friend WithEvents GridLabel As Label + Friend WithEvents RefreshButton As Button + Friend WithEvents RefreshTimeLabel As Label + Friend WithEvents RefreshFailedLabel As Label End Class Index: ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.vb =================================================================== diff -u -r1701 -r1702 --- ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.vb (.../ActiviteitenOpvolgingForm.vb) (revision 1701) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/ActiviteitenOpvolgingForm.vb (.../ActiviteitenOpvolgingForm.vb) (revision 1702) @@ -50,6 +50,8 @@ 'CLear selection on every data grid view. ChangeSelectedActivity(Nothing, 0) Next + 'Refresh all user grids. + RefreshUserGridsData() End Sub ''' @@ -65,10 +67,29 @@ _userControls.ForEach(Sub(userControl) userControl.RemoveSelection()) Else 'Clear selection of every grid except the one with the grid number. - For each control in _userControls + For Each control In _userControls 'Remove selection from every other grid. - if not control.GridNumber = gridNumber Then control.RemoveSelection() + If Not control.GridNumber = gridNumber Then control.RemoveSelection() Next End If End Sub + + Private Sub RefreshButton_Click(sender As Object, e As EventArgs) Handles RefreshButton.Click + RefreshUserGridsData() + End Sub + + ''' + ''' Try to reshresh all user grids and register time of latest refresh. + ''' + Private Sub RefreshUserGridsData() + 'Refresh every user control. Register whether or not all refreshes were successful. + Dim allSuccesfulRefresh = _userControls.All(Function(userControl) userControl.RefreshData()) + If allSuccesfulRefresh Then + 'Update latest refresh time label with current time. + RefreshTimeLabel.Text = TimeOfDay.ToString() + RefreshFailedLabel.Visible = False + Else + RefreshFailedLabel.Visible = True + End If + End Sub End Class Index: ActiviteitenOpvolging/ActiviteitenOpvolging/grids/DataGridViewUserControl.vb =================================================================== diff -u -r1701 -r1702 --- ActiviteitenOpvolging/ActiviteitenOpvolging/grids/DataGridViewUserControl.vb (.../DataGridViewUserControl.vb) (revision 1701) +++ ActiviteitenOpvolging/ActiviteitenOpvolging/grids/DataGridViewUserControl.vb (.../DataGridViewUserControl.vb) (revision 1702) @@ -35,6 +35,21 @@ _WorkItemsDataGridView.ClearSelection() End Sub + ''' + Public Function RefreshData() As Boolean Implements IDataGridUserControl.RefreshData + Try + 'Call helper method. + LoadGrid() + 'Refresh succesfull. + Return True + Catch ex As Exception + 'Failed to retrieve update with data. + Return False + Finally + _skipSelectionChanged = False + End Try + End Function + Private Sub DataGridViewUserControl_Load(sender As Object, e As EventArgs) Handles MyBase.Load Try 'Set back color and fore color. @@ -71,32 +86,38 @@ 'Set label. GridLabel.Text = ConfigsLoader.GridLabelNames(GridNumber) - - 'Load the data. - LoadData() Catch ex As Exception MessageBox.Show($"Could not load {Me.Name}.{vbNewLine}{ex.Message}", "An error occured...", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally _skipSelectionChanged = False End Try End Sub + Private isInitialLoad As Boolean = True ''' ''' Fetch the data and fill the data grid view with it. ''' - Private Sub LoadData() - 'Changes to data grid can trigger selectio changed event, ignores it for now. - _skipSelectionChanged = True - - 'Update headers and visibility of static columns. - UpdateStaticColumns() - + Private Sub LoadGrid() 'Load all work items. LoadWorkItems() - 'Generate grid columns for the activities of the work items. - GenerateActivityColumns(_workItems) + If isInitialLoad Then + 'Update headers and visibility of static columns. This only happens once. + UpdateStaticColumns() + 'Generate grid columns for the activities of the work items. This only happens once. + GenerateActivityColumns(_workItems) + + isInitialLoad = False + End If + + 'Clear grid. + WorkItemsDataGridView.DataSource = Nothing + WorkItemsDataGridView.Rows.Clear() + + 'Changes to data grid can trigger selectio changed event, ignores it for now. + _skipSelectionChanged = True + 'Show the work items. ShowWorkItems(_workItems)