Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/Views/ClosingStructuresFailureMechanismResultView.cs =================================================================== diff -u -r5b1276bcb70296a150fd4a26fbf8867e6f8aa0f2 -rb23612b7fdc45eb275697f50a94756386d3c2c39 --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/Views/ClosingStructuresFailureMechanismResultView.cs (.../ClosingStructuresFailureMechanismResultView.cs) (revision 5b1276bcb70296a150fd4a26fbf8867e6f8aa0f2) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/Views/ClosingStructuresFailureMechanismResultView.cs (.../ClosingStructuresFailureMechanismResultView.cs) (revision b23612b7fdc45eb275697f50a94756386d3c2c39) @@ -19,9 +19,13 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System.Linq; using System.Windows.Forms; +using Core.Common.Base; using Core.Common.Utils.Reflection; using Ringtoets.ClosingStructures.Data; +using Ringtoets.Common.Data.Calculation; +using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Forms.Views; using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; @@ -34,16 +38,57 @@ { private const int assessmentLayerOneColumnIndex = 1; + private readonly RecursiveObserver calculationInputObserver; + private readonly RecursiveObserver calculationOutputObserver; + private readonly RecursiveObserver calculationGroupObserver; + /// /// Creates a new instance of . /// public ClosingStructuresFailureMechanismResultView() { DataGridViewControl.AddCellFormattingHandler(OnCellFormatting); + // The concat is needed to observe the input of calculations in child groups. + calculationInputObserver = new RecursiveObserver( + UpdateDataGridViewDataSource, + cg => cg.Children.Concat( + cg.Children + .OfType() + .Select(c => c.GetObservableInput()) + ) + ); + calculationOutputObserver = new RecursiveObserver( + UpdateDataGridViewDataSource, + cg => cg.Children.Concat( + cg.Children + .OfType() + .Select(c => c.GetObservableOutput()) + ) + ); + calculationGroupObserver = new RecursiveObserver( + UpdateDataGridViewDataSource, + c => c.Children + ); + AddDataGridColumns(); } + public override IFailureMechanism FailureMechanism + { + set + { + base.FailureMechanism = value; + + var calculatableFailureMechanism = value as ICalculatableFailureMechanism; + CalculationGroup observableGroup = calculatableFailureMechanism != null ? calculatableFailureMechanism.CalculationsGroup : null; + + calculationInputObserver.Observable = observableGroup; + calculationOutputObserver.Observable = observableGroup; + calculationGroupObserver.Observable = observableGroup; + } + } + protected override object CreateFailureMechanismSectionResultRow(ClosingStructuresFailureMechanismSectionResult sectionResult) { return new ClosingStructuresFailureMechanismSectionResultRow(sectionResult); @@ -53,6 +98,10 @@ { DataGridViewControl.RemoveCellFormattingHandler(OnCellFormatting); + calculationInputObserver.Dispose(); + calculationOutputObserver.Dispose(); + calculationGroupObserver.Dispose(); + base.Dispose(disposing); }