Index: Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControl.cs =================================================================== diff -u -redb617ef7d51ddd52ed0b0095e679106925a837c -rcfced039be33d45f65e0668891eea1e5b96fb7e1 --- Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControl.cs (.../DataGridViewControl.cs) (revision edb617ef7d51ddd52ed0b0095e679106925a837c) +++ Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControl.cs (.../DataGridViewControl.cs) (revision cfced039be33d45f65e0668891eea1e5b96fb7e1) @@ -309,16 +309,7 @@ /// will clear the grid view. public void SetDataSource(IList dataSource) { - var handler = (EventHandler) RowChanged?.Clone(); - RemoveCurrentRowChangedHandler(handler); - dataGridView.DataSource = dataSource; - - AddCurrentRowChangedHandler(handler); - if (dataSource != null && dataSource.Count != 0) - { - RowChanged?.Invoke(this, EventArgs.Empty); - } } /// @@ -501,6 +492,7 @@ if (CurrentRow == null) { RowChanged.Invoke(o, eventArgs); + LastSelectedRow = -1; return; } Index: Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewControlTest.cs =================================================================== diff -u -redb617ef7d51ddd52ed0b0095e679106925a837c -rcfced039be33d45f65e0668891eea1e5b96fb7e1 --- Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewControlTest.cs (.../DataGridViewControlTest.cs) (revision edb617ef7d51ddd52ed0b0095e679106925a837c) +++ Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewControlTest.cs (.../DataGridViewControlTest.cs) (revision cfced039be33d45f65e0668891eea1e5b96fb7e1) @@ -1812,7 +1812,7 @@ } [Test] - public void CurrentCellChangedHandler_SelectedCellInNewRow_ExecuteEventHandler() + public void CurrentRowChangedHandler_SelectedCellInNewRow_ExecuteEventHandler() { // Setup using (var form = new Form()) @@ -1842,7 +1842,7 @@ } [Test] - public void CurrentCellChangedHandler_FirstSelection_ExecuteEventHandler() + public void CurrentRowChangedHandler_FirstSelection_ExecuteEventHandler() { // Setup using (var form = new Form()) @@ -1874,7 +1874,7 @@ } [Test] - public void CurrentCellChangedHandler_SelectCellInSameRow_SkipEventHandler() + public void CurrentRowChangedHandler_SelectCellInSameRow_SkipEventHandler() { // Setup using (var form = new Form()) @@ -1911,6 +1911,80 @@ } } + [Test] + public void CurrentRowChangedHandler_SetCurrentCellToNull_ResetsLastSelectedRow() + { + // Setup + using (var form = new Form()) + using (var control = new DataGridViewControl()) + { + form.Controls.Add(control); + form.Show(); + + var gridTester = new ControlTester("dataGridView"); + + control.AddTextBoxColumn("TestRoundedDouble", "Test header"); + control.AddTextBoxColumn("TestString", "Test string header"); + control.SetDataSource(new[] + { + new TestDataGridViewMultipleRows(new RoundedDouble(0, 2.5), "hello world"), + new TestDataGridViewMultipleRows(new RoundedDouble(0, 8.3), "test") + }); + + control.AddCurrentRowChangedHandler((sender, args) => + { + var i = 0; + }); + + // Precondition + control.SetCurrentCell(control.GetCell(0, 0)); + gridTester.FireEvent("CurrentCellChanged", EventArgs.Empty); + Assert.AreEqual(0, control.LastSelectedRow); + + // Call + control.SetCurrentCell(null); + + // Assert + Assert.AreEqual(-1, control.LastSelectedRow); + } + } + + [Test] + public void CurrentRowChangedHandler_SetHandlerToNull_DoesNothing() + { + // Setup + using (var form = new Form()) + using (var control = new DataGridViewControl()) + { + form.Controls.Add(control); + form.Show(); + + var gridTester = new ControlTester("dataGridView"); + + control.AddTextBoxColumn("TestRoundedDouble", "Test header"); + control.AddTextBoxColumn("TestString", "Test string header"); + control.SetDataSource(new[] + { + new TestDataGridViewMultipleRows(new RoundedDouble(0, 2.5), "hello world"), + new TestDataGridViewMultipleRows(new RoundedDouble(0, 8.3), "test") + }); + + control.AddCurrentRowChangedHandler(null); + + // Precondition + control.SetCurrentCell(control.GetCell(0, 0)); + gridTester.FireEvent("CurrentCellChanged", EventArgs.Empty); + Assert.AreEqual(-1, control.LastSelectedRow); + + // Call + control.SetCurrentCell(null); + + // Assert + Assert.AreEqual(-1, control.LastSelectedRow); + Assert.IsNull(control.CurrentRow); + } + } + #endregion } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/IllustrationPointsTableControlTest.cs =================================================================== diff -u -redb617ef7d51ddd52ed0b0095e679106925a837c -rcfced039be33d45f65e0668891eea1e5b96fb7e1 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/IllustrationPointsTableControlTest.cs (.../IllustrationPointsTableControlTest.cs) (revision edb617ef7d51ddd52ed0b0095e679106925a837c) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/IllustrationPointsTableControlTest.cs (.../IllustrationPointsTableControlTest.cs) (revision cfced039be33d45f65e0668891eea1e5b96fb7e1) @@ -267,8 +267,8 @@ dataGridViewControl.AddCurrentRowChangedHandler((sender, args) => eventThrown = true); // Call - dataGridViewControl.SetCurrentCell(dataGridView.Rows[0].Cells[1]); control.ResetLastSelectedRow(); + dataGridViewControl.SetCurrentCell(dataGridView.Rows[0].Cells[1]); // Assert Assert.IsTrue(eventThrown);