Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionsProbabilityAssessmentView.cs =================================================================== diff -u -r4b5247bbd278f66bb4536a0c92beb667e46a11c3 -r2a88a8c275a4e795e771affc75aa31f475d97079 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionsProbabilityAssessmentView.cs (.../FailureMechanismSectionsProbabilityAssessmentView.cs) (revision 4b5247bbd278f66bb4536a0c92beb667e46a11c3) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionsProbabilityAssessmentView.cs (.../FailureMechanismSectionsProbabilityAssessmentView.cs) (revision 2a88a8c275a4e795e771affc75aa31f475d97079) @@ -55,14 +55,14 @@ this.probabilityAssessmentInput = probabilityAssessmentInput; - failureMechanismSectionsTable.AddTextBoxColumn(nameof(FailureMechanismSectionProbabilityAssessmentRow.N), - Resources.FailureMechanismSectionProbabilityAssessment_N_Rounded_DisplayName, - true); + failureMechanismSectionsDataGridViewControl.AddTextBoxColumn(nameof(FailureMechanismSectionProbabilityAssessmentRow.N), + Resources.FailureMechanismSectionProbabilityAssessment_N_Rounded_DisplayName, + true); } - protected override void UpdateTableData() + protected override void SetDataGridViewControlData() { - failureMechanismSectionsTable.SetDataSource( + failureMechanismSectionsDataGridViewControl.SetDataSource( sections.Select(section => new FailureMechanismSectionProbabilityAssessmentRow(section, probabilityAssessmentInput)) .ToArray()); } Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionsView.Designer.cs =================================================================== diff -u -r3542047341fc941a6f4b6c89dd4262bdba477ca2 -r2a88a8c275a4e795e771affc75aa31f475d97079 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionsView.Designer.cs (.../FailureMechanismSectionsView.Designer.cs) (revision 3542047341fc941a6f4b6c89dd4262bdba477ca2) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionsView.Designer.cs (.../FailureMechanismSectionsView.Designer.cs) (revision 2a88a8c275a4e795e771affc75aa31f475d97079) @@ -37,19 +37,19 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FailureMechanismSectionsView)); - this.failureMechanismSectionsTable = new Core.Common.Controls.DataGrid.DataGridViewControl(); + this.failureMechanismSectionsDataGridViewControl = new Core.Common.Controls.DataGrid.DataGridViewControl(); this.SuspendLayout(); // - // failureMechanismSectionsTable + // failureMechanismSectionsDataGridViewControl // - resources.ApplyResources(this.failureMechanismSectionsTable, "failureMechanismSectionsTable"); - this.failureMechanismSectionsTable.MultiSelect = true; - this.failureMechanismSectionsTable.Name = "failureMechanismSectionsTable"; - this.failureMechanismSectionsTable.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.RowHeaderSelect; + resources.ApplyResources(this.failureMechanismSectionsDataGridViewControl, "failureMechanismSectionsDataGridViewControl"); + this.failureMechanismSectionsDataGridViewControl.MultiSelect = true; + this.failureMechanismSectionsDataGridViewControl.Name = "failureMechanismSectionsDataGridViewControl"; + this.failureMechanismSectionsDataGridViewControl.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.RowHeaderSelect; // // FailureMechanismSectionsView // - this.Controls.Add(this.failureMechanismSectionsTable); + this.Controls.Add(this.failureMechanismSectionsDataGridViewControl); this.Name = "FailureMechanismSectionsView"; resources.ApplyResources(this, "$this"); this.ResumeLayout(false); @@ -58,6 +58,6 @@ #endregion - protected Core.Common.Controls.DataGrid.DataGridViewControl failureMechanismSectionsTable; + protected Core.Common.Controls.DataGrid.DataGridViewControl failureMechanismSectionsDataGridViewControl; } } Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionsView.cs =================================================================== diff -u -r3542047341fc941a6f4b6c89dd4262bdba477ca2 -r2a88a8c275a4e795e771affc75aa31f475d97079 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionsView.cs (.../FailureMechanismSectionsView.cs) (revision 3542047341fc941a6f4b6c89dd4262bdba477ca2) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionsView.cs (.../FailureMechanismSectionsView.cs) (revision 2a88a8c275a4e795e771affc75aa31f475d97079) @@ -39,6 +39,8 @@ private readonly Observer failureMechanismObserver; + private List currentSections; + /// /// Creates a new instance of . /// @@ -59,14 +61,14 @@ InitializeComponent(); - failureMechanismSectionsTable.AddTextBoxColumn(nameof(FailureMechanismSectionRow.Name), - Resources.FailureMechanismSection_Name_DisplayName, - true); - failureMechanismSectionsTable.AddTextBoxColumn(nameof(FailureMechanismSectionRow.Length), - Resources.FailureMechanismSection_Length_Rounded_DisplayName, - true); + failureMechanismSectionsDataGridViewControl.AddTextBoxColumn(nameof(FailureMechanismSectionRow.Name), + Resources.FailureMechanismSection_Name_DisplayName, + true); + failureMechanismSectionsDataGridViewControl.AddTextBoxColumn(nameof(FailureMechanismSectionRow.Length), + Resources.FailureMechanismSection_Length_Rounded_DisplayName, + true); - failureMechanismObserver = new Observer(UpdateTableData) + failureMechanismObserver = new Observer(HandleFailureMechanismSectionsChange) { Observable = failureMechanism }; @@ -84,7 +86,7 @@ protected override void OnLoad(EventArgs e) { - UpdateTableData(); + SetDataGridViewControlData(); } protected override void Dispose(bool disposing) @@ -100,11 +102,23 @@ } /// - /// Updates the data in the failure mechanism sections table. + /// Sets the data in the failure mechanism sections data grid view control. /// - protected virtual void UpdateTableData() + protected virtual void SetDataGridViewControlData() { - failureMechanismSectionsTable.SetDataSource(sections.Select(section => new FailureMechanismSectionRow(section)).ToArray()); + currentSections = sections.ToList(); + + failureMechanismSectionsDataGridViewControl.SetDataSource(sections.Select(section => new FailureMechanismSectionRow(section)).ToArray()); } + + private void HandleFailureMechanismSectionsChange() + { + if (currentSections.SequenceEqual(sections)) + { + return; + } + + SetDataGridViewControlData(); + } } } \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionsView.resx =================================================================== diff -u -ra39fb3074f6c4cfa06efce5663d8ee428587dddb -r2a88a8c275a4e795e771affc75aa31f475d97079 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionsView.resx (.../FailureMechanismSectionsView.resx) (revision a39fb3074f6c4cfa06efce5663d8ee428587dddb) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionsView.resx (.../FailureMechanismSectionsView.resx) (revision 2a88a8c275a4e795e771affc75aa31f475d97079) @@ -118,30 +118,30 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + Fill - + 0, 0 - + 750, 420 - + 0 - - failureMechanismSectionsTable + + failureMechanismSectionsDataGridViewControl - - Ringtoets.Common.Forms.Views.FailureMechanismSectionsTable, Ringtoets.Common.Forms, Version=18.1.1.1, Culture=neutral, PublicKeyToken=null + + Core.Common.Controls.DataGrid.DataGridViewControl, Core.Common.Controls, Version=18.1.1.1, Culture=neutral, PublicKeyToken=null - + $this - + 0 Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismSectionsProbabilityAssessmentViewTest.cs =================================================================== diff -u -ra202923168391f85a329d0ac7cd5e84d8ac4eb0a -r2a88a8c275a4e795e771affc75aa31f475d97079 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismSectionsProbabilityAssessmentViewTest.cs (.../FailureMechanismSectionsProbabilityAssessmentViewTest.cs) (revision a202923168391f85a329d0ac7cd5e84d8ac4eb0a) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismSectionsProbabilityAssessmentViewTest.cs (.../FailureMechanismSectionsProbabilityAssessmentViewTest.cs) (revision 2a88a8c275a4e795e771affc75aa31f475d97079) @@ -247,7 +247,7 @@ private static DataGridViewControl GetSectionsTable(FailureMechanismSectionsProbabilityAssessmentView view) { - return ControlTestHelper.GetControls(view, "failureMechanismSectionsTable").Single(); + return ControlTestHelper.GetControls(view, "failureMechanismSectionsDataGridViewControl").Single(); } private static void AssertSectionsTable(FailureMechanismSection[] sections, Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismSectionsViewTest.cs =================================================================== diff -u -r2fe1c609f358f97b7fa0fd0b23d1fa9fb811de59 -r2a88a8c275a4e795e771affc75aa31f475d97079 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismSectionsViewTest.cs (.../FailureMechanismSectionsViewTest.cs) (revision 2fe1c609f358f97b7fa0fd0b23d1fa9fb811de59) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismSectionsViewTest.cs (.../FailureMechanismSectionsViewTest.cs) (revision 2a88a8c275a4e795e771affc75aa31f475d97079) @@ -105,16 +105,16 @@ Assert.AreSame(failureMechanism, view.FailureMechanism); Assert.AreEqual(1, view.Controls.Count); - DataGridViewControl sectionsTable = GetSectionsTable(view); - Assert.NotNull(sectionsTable); - Assert.AreEqual(DockStyle.Fill, sectionsTable.Dock); + DataGridViewControl sectionsDataGridViewControl = GetSectionsDataGridViewControl(view); + Assert.NotNull(sectionsDataGridViewControl); + Assert.AreEqual(DockStyle.Fill, sectionsDataGridViewControl.Dock); - DataGridViewColumn nameColumn = sectionsTable.GetColumnFromIndex(nameColumnIndex); + DataGridViewColumn nameColumn = sectionsDataGridViewControl.GetColumnFromIndex(nameColumnIndex); Assert.AreEqual("Vaknaam", nameColumn.HeaderText); - DataGridViewColumn lengthColumn = sectionsTable.GetColumnFromIndex(lengthColumnIndex); + DataGridViewColumn lengthColumn = sectionsDataGridViewControl.GetColumnFromIndex(lengthColumnIndex); Assert.AreEqual("Lengte* [m]", lengthColumn.HeaderText); - Assert.Throws(() => sectionsTable.GetColumnFromIndex(lengthColumnIndex + 1)); + Assert.Throws(() => sectionsDataGridViewControl.GetColumnFromIndex(lengthColumnIndex + 1)); } mocks.VerifyAll(); @@ -134,7 +134,7 @@ using (FailureMechanismSectionsView view = ShowFailureMechanismSectionsView(sections, failureMechanism)) { // Assert - CollectionAssert.IsEmpty(GetSectionsTable(view).Rows); + CollectionAssert.IsEmpty(GetSectionsDataGridViewControl(view).Rows); } mocks.VerifyAll(); @@ -159,37 +159,60 @@ using (FailureMechanismSectionsView view = ShowFailureMechanismSectionsView(sections, failureMechanism)) { // Assert - DataGridViewControl sectionsTable = GetSectionsTable(view); + DataGridViewControl sectionsDataGridViewControl = GetSectionsDataGridViewControl(view); - AssertSectionsTable(sections, sectionsTable); + AssertSectionsDataGridViewControl(sections, sectionsDataGridViewControl); } mocks.VerifyAll(); } [Test] - public void GivenViewWithSections_WhenSectionsUpdated_ThenTableUpdated() + public void GivenViewWithSections_WhenFailureMechanismNotifiesChangeAndSectionsUpdated_ThenTableUpdated() { // Given var failureMechanism = new TestFailureMechanism(); failureMechanism.AddSection(CreateFailureMechanismSection("a")); using (FailureMechanismSectionsView view = ShowFailureMechanismSectionsView(failureMechanism.Sections, failureMechanism)) { - DataGridViewControl sectionsTable = GetSectionsTable(view); + DataGridViewControl sectionsDataGridViewControl = GetSectionsDataGridViewControl(view); // Precondition - AssertSectionsTable(failureMechanism.Sections.ToArray(), sectionsTable); + AssertSectionsDataGridViewControl(failureMechanism.Sections.ToArray(), sectionsDataGridViewControl); // When failureMechanism.AddSection(CreateFailureMechanismSection("b")); failureMechanism.NotifyObservers(); // Then - AssertSectionsTable(failureMechanism.Sections.ToArray(), sectionsTable); + AssertSectionsDataGridViewControl(failureMechanism.Sections.ToArray(), sectionsDataGridViewControl); } } + [Test] + public void GivenViewWithSections_WhenFailureMechanismNotifiesChangeAndSectionsNotUpdated_ThenTableNotUpdated() + { + // Given + var failureMechanism = new TestFailureMechanism(); + failureMechanism.AddSection(CreateFailureMechanismSection("a")); + + using (FailureMechanismSectionsView view = ShowFailureMechanismSectionsView(failureMechanism.Sections, failureMechanism)) + { + DataGridView sectionsDataGridView = GetSectionsDataGridView(view); + + var count = 0; + + sectionsDataGridView.Invalidated += (s, e) => { count++; }; + + // When + failureMechanism.NotifyObservers(); + + // Then + Assert.AreEqual(0, count); + } + } + private static FailureMechanismSection CreateFailureMechanismSection(string name) { var random = new Random(39); @@ -200,19 +223,24 @@ }); } - private static DataGridViewControl GetSectionsTable(FailureMechanismSectionsView view) + private static DataGridViewControl GetSectionsDataGridViewControl(FailureMechanismSectionsView view) { - return ControlTestHelper.GetControls(view, "failureMechanismSectionsTable").Single(); + return ControlTestHelper.GetControls(view, "failureMechanismSectionsDataGridViewControl").Single(); } - private static void AssertSectionsTable(FailureMechanismSection[] sections, DataGridViewControl sectionsTable) + private static DataGridView GetSectionsDataGridView(FailureMechanismSectionsView view) { - Assert.AreEqual(sections.Length, sectionsTable.Rows.Count); + return ControlTestHelper.GetControls(view, "dataGridView").Single(); + } - for (var i = 0; i < sectionsTable.Rows.Count; i++) + private static void AssertSectionsDataGridViewControl(FailureMechanismSection[] sections, DataGridViewControl sectionsDataGridViewControl) + { + Assert.AreEqual(sections.Length, sectionsDataGridViewControl.Rows.Count); + + for (var i = 0; i < sectionsDataGridViewControl.Rows.Count; i++) { FailureMechanismSection section = sections[i]; - DataGridViewCellCollection rowCells = sectionsTable.Rows[i].Cells; + DataGridViewCellCollection rowCells = sectionsDataGridViewControl.Rows[i].Cells; Assert.AreEqual(section.Name, rowCells[nameColumnIndex].Value); Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssessmentSectionAssemblyCategoriesView.Designer.cs =================================================================== diff -u -rf656ad7d168ebf3ac3a3e906ec8c8a88f9806ad9 -r2a88a8c275a4e795e771affc75aa31f475d97079 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssessmentSectionAssemblyCategoriesView.Designer.cs (.../AssessmentSectionAssemblyCategoriesView.Designer.cs) (revision f656ad7d168ebf3ac3a3e906ec8c8a88f9806ad9) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssessmentSectionAssemblyCategoriesView.Designer.cs (.../AssessmentSectionAssemblyCategoriesView.Designer.cs) (revision 2a88a8c275a4e795e771affc75aa31f475d97079) @@ -19,8 +19,6 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using System.Windows.Forms; - namespace Ringtoets.Integration.Forms.Views { partial class AssessmentSectionAssemblyCategoriesView @@ -43,7 +41,7 @@ this.assessmentSectionAssemblyCategoriesTable = new Ringtoets.Integration.Forms.Views.AssessmentSectionAssemblyCategoriesTable(); this.SuspendLayout(); // - // failureMechanismSectionsTable + // assessmentSectionAssemblyCategoriesTable // resources.ApplyResources(this.assessmentSectionAssemblyCategoriesTable, "assessmentSectionAssemblyCategoriesTable"); this.assessmentSectionAssemblyCategoriesTable.MultiSelect = true;