Index: Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControl.cs =================================================================== diff -u -r0efc76f9c5ce1c3c26e501bbd2e884e2fcfa64ed -r5c08229e46f7bdab0ad1d754956f152c90ab3169 --- Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControl.cs (.../DataGridViewControl.cs) (revision 0efc76f9c5ce1c3c26e501bbd2e884e2fcfa64ed) +++ Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControl.cs (.../DataGridViewControl.cs) (revision 5c08229e46f7bdab0ad1d754956f152c90ab3169) @@ -39,11 +39,6 @@ SubscribeEvents(); } - private void SubscribeEvents() - { - dataGridView.CurrentCellDirtyStateChanged += DataGridViewCurrentCellDirtyStateChanged; - } - /// /// Adds a new to the with the given data. /// @@ -80,18 +75,42 @@ }); } + /// + /// Adds a new to the with the given data. + /// + /// 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) + { + dataGridView.Columns.Add(new DataGridViewComboBoxColumn + { + DataPropertyName = dataPropertyName, + HeaderText = headerText, + Name = string.Format("column_{0}", dataPropertyName), + ValueMember = "This", + DisplayMember = "DisplayName" + }); + } + + private void SubscribeEvents() + { + dataGridView.CurrentCellDirtyStateChanged += DataGridViewCurrentCellDirtyStateChanged; + } + #region Event handling private void DataGridViewCurrentCellDirtyStateChanged(object sender, EventArgs e) { // Ensure checkbox values are directly committed DataGridViewColumn currentColumn = dataGridView.Columns[dataGridView.CurrentCell.ColumnIndex]; - if (currentColumn is DataGridViewCheckBoxColumn) + if (currentColumn is DataGridViewCheckBoxColumn || currentColumn is DataGridViewComboBoxColumn) { dataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit); } } #endregion } -} +} \ No newline at end of file Index: Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewControlTest.cs =================================================================== diff -u -r0efc76f9c5ce1c3c26e501bbd2e884e2fcfa64ed -r5c08229e46f7bdab0ad1d754956f152c90ab3169 --- Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewControlTest.cs (.../DataGridViewControlTest.cs) (revision 0efc76f9c5ce1c3c26e501bbd2e884e2fcfa64ed) +++ Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewControlTest.cs (.../DataGridViewControlTest.cs) (revision 5c08229e46f7bdab0ad1d754956f152c90ab3169) @@ -100,8 +100,7 @@ // Assert Assert.AreEqual(1, dataGridView.ColumnCount); - var columnData = dataGridView.Columns[0]; - Assert.IsTrue(columnData.GetType() == typeof(DataGridViewTextBoxColumn)); + DataGridViewTextBoxColumn columnData = (DataGridViewTextBoxColumn) dataGridView.Columns[0]; Assert.AreEqual(propertyName, columnData.DataPropertyName); Assert.AreEqual(string.Format("column_{0}", propertyName), columnData.Name); Assert.AreEqual(headerText, columnData.HeaderText); @@ -133,17 +132,49 @@ // Assert Assert.AreEqual(1, dataGridView.ColumnCount); - var columnData = dataGridView.Columns[0]; - Assert.IsTrue(columnData.GetType() == typeof(DataGridViewCheckBoxColumn)); + DataGridViewCheckBoxColumn columnData = (DataGridViewCheckBoxColumn) dataGridView.Columns[0]; Assert.AreEqual(propertyName, columnData.DataPropertyName); Assert.AreEqual(string.Format("column_{0}", propertyName), columnData.Name); Assert.AreEqual(headerText, columnData.HeaderText); } } [Test] - public void DataGridViewControl_EditValueDirtyStateChangedEventFired_ValueCommittedCellInEditMode() + public void AddComboBoxColumn_Always_AddsColumnToDataGridView() { + using (var form = new Form()) + { + var propertyName = "PropertyName"; + var headerText = "HeaderText"; + + 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); + + // Assert + Assert.AreEqual(1, dataGridView.ColumnCount); + + DataGridViewComboBoxColumn columnData = (DataGridViewComboBoxColumn) dataGridView.Columns[0]; + + Assert.AreEqual(propertyName, columnData.DataPropertyName); + Assert.AreEqual(string.Format("column_{0}", propertyName), columnData.Name); + Assert.AreEqual(headerText, columnData.HeaderText); + Assert.AreEqual("This", columnData.ValueMember); + Assert.AreEqual("DisplayName", columnData.DisplayMember); + } + } + + [Test] + public void DataGridViewControlCheckBoxColumn_EditValueDirtyStateChangedEventFired_ValueCommittedCellInEditMode() + { // Setup using (var form = new Form()) { @@ -171,6 +202,7 @@ // Assert Assert.IsTrue(dataGridViewCell.IsInEditMode); + Assert.IsTrue((bool)dataGridViewCell.FormattedValue); } } }