Index: Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControl.cs =================================================================== diff -u -r8db0134345361d006bd43ac7924c7096274556d7 -r5bd008e0d2b70216c0e230a134da5964f8edbe69 --- Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControl.cs (.../DataGridViewControl.cs) (revision 8db0134345361d006bd43ac7924c7096274556d7) +++ Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControl.cs (.../DataGridViewControl.cs) (revision 5bd008e0d2b70216c0e230a134da5964f8edbe69) @@ -1,4 +1,4 @@ -// Copyright (C) Stichting Deltares 2017. All rights reserved. +// Copyright (C) Stichting Deltares 2017. All rights reserved. // // This file is part of Ringtoets. // @@ -287,10 +287,9 @@ /// The datasource that is set on the column. /// The of the column. /// The of the column. - /// The of the column. /// is also used to create the . /// The format is "column_. - public void AddComboBoxColumn(string dataPropertyName, string headerText, IEnumerable dataSource, string valueMember, string displayMember, DataGridViewAutoSizeColumnMode autoSizeMode = DataGridViewAutoSizeColumnMode.AllCells) + public void AddComboBoxColumn(string dataPropertyName, string headerText, IEnumerable dataSource, string valueMember, string displayMember) { var dataGridViewComboBoxColumn = new DataGridViewComboBoxColumn { @@ -299,7 +298,7 @@ Name = string.Format(CultureInfo.InvariantCulture, "column_{0}", dataPropertyName), - AutoSizeMode = autoSizeMode, + AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells, FlatStyle = FlatStyle.Flat }; @@ -549,11 +548,12 @@ private void DataGridViewOnCurrentCellDirtyStateChanged(object sender, EventArgs e) { - // Ensure checkbox values are directly committed + // Ensure checkbox and combobox values are directly committed DataGridViewColumn currentColumn = dataGridView.Columns[dataGridView.CurrentCell.ColumnIndex]; if (currentColumn is DataGridViewCheckBoxColumn || currentColumn is DataGridViewComboBoxColumn) { dataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit); + dataGridView.Refresh(); } } Index: Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewControlTest.cs =================================================================== diff -u -r8db0134345361d006bd43ac7924c7096274556d7 -r5bd008e0d2b70216c0e230a134da5964f8edbe69 --- Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewControlTest.cs (.../DataGridViewControlTest.cs) (revision 8db0134345361d006bd43ac7924c7096274556d7) +++ Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewControlTest.cs (.../DataGridViewControlTest.cs) (revision 5bd008e0d2b70216c0e230a134da5964f8edbe69) @@ -1,4 +1,4 @@ -// Copyright (C) Stichting Deltares 2017. All rights reserved. +// Copyright (C) Stichting Deltares 2017. All rights reserved. // // This file is part of Ringtoets. // @@ -398,42 +398,6 @@ } [Test] - public void AddComboBoxColumn_AutoSizeModeSet_AddsColumnToDataGridViewWithAutoSizeMode() - { - const DataGridViewAutoSizeColumnMode autoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader; - - using (var form = new Form()) - using (var control = new DataGridViewControl()) - { - form.Controls.Add(control); - form.Show(); - - var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; - - // Precondition - Assert.AreEqual(0, dataGridView.ColumnCount); - - // Call - control.AddComboBoxColumn(propertyName, headerText, null, null, null, autoSizeMode); - - // Assert - Assert.AreEqual(1, dataGridView.ColumnCount); - - var columnData = (DataGridViewComboBoxColumn) dataGridView.Columns[0]; - - Assert.AreEqual(propertyName, columnData.DataPropertyName); - Assert.AreEqual($"column_{propertyName}", columnData.Name); - Assert.AreEqual(headerText, columnData.HeaderText); - Assert.IsNull(columnData.DataSource); - Assert.IsEmpty(columnData.ValueMember); - Assert.IsEmpty(columnData.DisplayMember); - Assert.AreEqual(autoSizeMode, columnData.AutoSizeMode); - Assert.AreEqual(DataGridViewContentAlignment.MiddleCenter, columnData.HeaderCell.Style.Alignment); - Assert.AreEqual(FlatStyle.Flat, columnData.FlatStyle); - } - } - - [Test] public void AddComboBoxColumn_DataSourceValueMemberAndDisplayMemberNull_AddsColumnToDataGridViewWithoutDataSourceValueMemberAndDisplayMember() { using (var form = new Form()) @@ -1570,7 +1534,11 @@ false }); + var invalidated = false; + dataGridView.Invalidated += (sender, args) => invalidated = true; + DataGridViewCell dataGridViewCell = control.GetCell(0, 0); + control.SetCurrentCell(dataGridViewCell); dataGridView.BeginEdit(false); gridTester.FireEvent("KeyUp", new KeyEventArgs(Keys.Space)); @@ -1581,10 +1549,60 @@ // Assert Assert.IsTrue(dataGridViewCell.IsInEditMode); Assert.IsTrue(Convert.ToBoolean(dataGridViewCell.FormattedValue)); + Assert.IsTrue(invalidated); } } [Test] + public void DataGridViewControlComboBoxColumn_EditValueDirtyStateChangedEventFired_ValueCommittedCellInEditMode() + { + // Setup + using (var form = new Form()) + using (var control = new DataGridViewControl()) + { + form.Controls.Add(control); + form.Show(); + + var gridTester = new ControlTester("dataGridView"); + var dataGridView = (DataGridView) gridTester.TheObject; + + EnumDisplayWrapper[] dataSource = Enum.GetValues(typeof(TestEnum)) + .OfType() + .Select(e => new EnumDisplayWrapper(e)) + .ToArray(); + + control.AddComboBoxColumn("Test property", "Test header", dataSource, + nameof(EnumDisplayWrapper.Value), + nameof(EnumDisplayWrapper.DisplayName)); + + // Precondition + Assert.AreEqual(1, dataGridView.ColumnCount); + + control.SetDataSource(new[] + { + TestEnum.NoDisplayName + }); + + var invalidated = false; + dataGridView.Invalidated += (sender, args) => invalidated = true; + + DataGridViewCell dataGridViewCell = control.GetCell(0, 0); + + control.SetCurrentCell(dataGridViewCell); + dataGridView.BeginEdit(false); + dataGridViewCell.Value = TestEnum.DisplayName; + + // Call + gridTester.FireEvent("CurrentCellDirtyStateChanged", EventArgs.Empty); + + // Assert + Assert.IsTrue(dataGridViewCell.IsInEditMode); + Assert.AreEqual(TestEnum.DisplayName, dataGridViewCell.Value); + Assert.IsTrue(invalidated); + } + } + + [Test] public void DataGridView_CellValidatingValueValid_DoesNotShowErrorToolTip() { // Setup