Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Properties/Resources.Designer.cs =================================================================== diff -u -rb6d263f3f919ce64e84f4031b94a19e0995f202c -r47134c6560c0c969c184ab3bd3157fb06fb4d120 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision b6d263f3f919ce64e84f4031b94a19e0995f202c) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 47134c6560c0c969c184ab3bd3157fb06fb4d120) @@ -99,7 +99,7 @@ } /// - /// Looks up a localized string similar to Id. + /// Looks up a localized string similar to ID. /// public static string AssessmentSection_Id_DisplayName { get { @@ -512,7 +512,7 @@ } /// - /// Looks up a localized string similar to Identificatiecode. + /// Looks up a localized string similar to Traject ID. /// public static string ReferenceLineMetaSelectionDialog_ColumnHeader_AssessmentSectionId { get { @@ -584,6 +584,15 @@ } /// + /// Looks up a localized string similar to Traject toevoegen. + /// + public static string RingtoetsRibbon_AddAssessmentSection { + get { + return ResourceManager.GetString("RingtoetsRibbon_AddAssessmentSection", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Hydraulische randvoorwaardendatabase. /// public static string SelectHydraulicBoundaryDatabaseFile_FilterName { Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Properties/Resources.resx =================================================================== diff -u -rb6d263f3f919ce64e84f4031b94a19e0995f202c -r47134c6560c0c969c184ab3bd3157fb06fb4d120 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Properties/Resources.resx (.../Resources.resx) (revision b6d263f3f919ce64e84f4031b94a19e0995f202c) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Properties/Resources.resx (.../Resources.resx) (revision 47134c6560c0c969c184ab3bd3157fb06fb4d120) @@ -252,13 +252,13 @@ Id van het traject. - Id + ID Signaleringswaarde - Identificatiecode + Traject ID Ondergrens @@ -296,4 +296,7 @@ ..\Resources\AddFolder-stand.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + Traject toevoegen + \ No newline at end of file Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/ReferenceLineMetaSelectionDialog.cs =================================================================== diff -u -r04e456a3c39bc3a6e9c4cba357964aa9c83f258c -r47134c6560c0c969c184ab3bd3157fb06fb4d120 --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/ReferenceLineMetaSelectionDialog.cs (.../ReferenceLineMetaSelectionDialog.cs) (revision 04e456a3c39bc3a6e9c4cba357964aa9c83f258c) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/ReferenceLineMetaSelectionDialog.cs (.../ReferenceLineMetaSelectionDialog.cs) (revision 47134c6560c0c969c184ab3bd3157fb06fb4d120) @@ -21,11 +21,12 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; +using System.Text.RegularExpressions; using System.Windows.Forms; using Core.Common.Controls.DataGrid; using Core.Common.Controls.Dialogs; -using Core.Common.Utils.Reflection; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Integration.Forms.Properties; using CommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; @@ -85,7 +86,9 @@ ReferenceLineMetaDataGridViewControl.AddTextBoxColumn("AssessmentSectionId", Resources.ReferenceLineMetaSelectionDialog_ColumnHeader_AssessmentSectionId); ReferenceLineMetaDataGridViewControl.AddTextBoxColumn("SignalingValue", Resources.ReferenceLineMetaSelectionDialog_ColumnHeader_SignalingValue); ReferenceLineMetaDataGridViewControl.AddTextBoxColumn("LowerLimitValue", Resources.ReferenceLineMetaSelectionDialog_ColumnHeader_LowerLimitValue); - ReferenceLineMetaDataGridViewControl.SetDataSource(referenceLineMetas.Select(rlm => new ReferenceLineMetaSelectionRow(rlm)).ToArray()); + + var dataSource = referenceLineMetas.Select(rlm => new ReferenceLineMetaSelectionRow(rlm)).OrderBy(row => row.AssessmentSectionId, new AssessmentSectionIdComparer()); + ReferenceLineMetaDataGridViewControl.SetDataSource(dataSource.ToArray()); } private void OkButtonOnClick(object sender, EventArgs e) @@ -130,5 +133,69 @@ public int? LowerLimitValue { get; private set; } public ReferenceLineMeta ReferenceLineMeta { get; private set; } } + + private class AssessmentSectionIdComparer : IComparer + { + public int Compare(string x, string y) + { + int idX; + string suffixX; + int subX; + + int idY; + string suffixY; + int subY; + + SplitAssessmentSectionId(x, out idX, out suffixX, out subX); + SplitAssessmentSectionId(y, out idY, out suffixY, out subY); + + if (idX != idY) + { + return idX - idY; + } + + if (string.IsNullOrEmpty(suffixX) != string.IsNullOrEmpty(suffixY)) + { + return string.IsNullOrEmpty(suffixX) ? -1 : 1; + } + if (!string.IsNullOrEmpty(suffixX) && suffixX != suffixY) + { + return string.Compare(suffixX, suffixY, StringComparison.Ordinal); + } + return subX - subY; + } + + private static void SplitAssessmentSectionId(string str, out int id, out string suffix, out int sub) + { + if (string.IsNullOrEmpty(str)) + { + id = 0; + sub = 0; + suffix = string.Empty; + return; + } + var parts = str.Split('-'); + var firstPart = Regex.Split(parts.First(), "([A-Za-z])"); + if (firstPart.Length > 1) + { + int.TryParse(firstPart[0], out id); + suffix = firstPart[1]; + } + else + { + int.TryParse(parts[0], out id); + suffix = string.Empty; + } + + if (parts.Length == 2) + { + int.TryParse(parts[1], out sub); + } + else + { + sub = 0; + } + } + } } } \ No newline at end of file Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsRibbon.xaml =================================================================== diff -u -rb6d263f3f919ce64e84f4031b94a19e0995f202c -r47134c6560c0c969c184ab3bd3157fb06fb4d120 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsRibbon.xaml (.../RingtoetsRibbon.xaml) (revision b6d263f3f919ce64e84f4031b94a19e0995f202c) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsRibbon.xaml (.../RingtoetsRibbon.xaml) (revision 47134c6560c0c969c184ab3bd3157fb06fb4d120) @@ -15,7 +15,7 @@ - + Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Commands/AssessmentSectionFromFileCommandHandlerTest.cs =================================================================== diff -u -r51b7ca830473fab00ed10f5cb0ff845f6be7503f -r47134c6560c0c969c184ab3bd3157fb06fb4d120 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Commands/AssessmentSectionFromFileCommandHandlerTest.cs (.../AssessmentSectionFromFileCommandHandlerTest.cs) (revision 51b7ca830473fab00ed10f5cb0ff845f6be7503f) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Commands/AssessmentSectionFromFileCommandHandlerTest.cs (.../AssessmentSectionFromFileCommandHandlerTest.cs) (revision 47134c6560c0c969c184ab3bd3157fb06fb4d120) @@ -428,7 +428,7 @@ var selectionDialog = (ReferenceLineMetaSelectionDialog) new FormTester(name).TheObject; var grid = (DataGridViewControl) new ControlTester("ReferenceLineMetaDataGridViewControl", selectionDialog).TheObject; var dataGridView = grid.Controls.OfType().First(); - dataGridView[0, 1].Selected = true; + dataGridView.Rows[1].Selected = true; new ButtonTester("Ok", selectionDialog).Click(); }; Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/ReferenceLineMetaSelectionDialogTest.cs =================================================================== diff -u -r04e456a3c39bc3a6e9c4cba357964aa9c83f258c -r47134c6560c0c969c184ab3bd3157fb06fb4d120 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/ReferenceLineMetaSelectionDialogTest.cs (.../ReferenceLineMetaSelectionDialogTest.cs) (revision 04e456a3c39bc3a6e9c4cba357964aa9c83f258c) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/ReferenceLineMetaSelectionDialogTest.cs (.../ReferenceLineMetaSelectionDialogTest.cs) (revision 47134c6560c0c969c184ab3bd3157fb06fb4d120) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using Core.Common.Controls.DataGrid; @@ -71,6 +72,74 @@ } [Test] + public void Constructor_WithParentAndUnorderedReferenceLineMetas_ShowsOrderedGrid() + { + // Setup + var referenceLineMetas = new[] + { + new ReferenceLineMeta(), + new ReferenceLineMeta + { + AssessmentSectionId = "101-10" + }, + new ReferenceLineMeta + { + AssessmentSectionId = "101b-1" + }, + new ReferenceLineMeta + { + AssessmentSectionId = "101-2" + }, + new ReferenceLineMeta + { + AssessmentSectionId = "101-1" + }, + new ReferenceLineMeta + { + AssessmentSectionId = "101a-1" + }, + new ReferenceLineMeta + { + AssessmentSectionId = "10" + }, + new ReferenceLineMeta + { + AssessmentSectionId = "102-1" + } + }; + + // Call + using (var dialog = new ReferenceLineMetaSelectionDialog(new Form(), referenceLineMetas)) + { + // Assert + DataGridViewControl grid = (DataGridViewControl) new ControlTester("ReferenceLineMetaDataGridViewControl", dialog).TheObject; + DataGridView dataGridView = grid.Controls.OfType().First(); + + var assessmentIdValuesInGrid = new List(); + for (var i = 0; i < dataGridView.Rows.Count; i++) + { + var currentIdValue = dataGridView[0, i].FormattedValue; + if (currentIdValue != null) + { + assessmentIdValuesInGrid.Add(currentIdValue.ToString()); + } + } + + CollectionAssert.AreEqual(new[] + { + "", + "10", + "101-1", + "101-2", + "101-10", + "101a-1", + "101b-1", + "102-1" + }, assessmentIdValuesInGrid); + } + } + + [Test] public void OnLoad_Always_SetMinimumSize() { // Setup