Index: Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControlCellFormatExtensions.cs =================================================================== diff -u -r6cdb90fc3f89fe0c44b62d3be7266a0090a6b891 -rbcaba4c27e18f3551487c131816fb5c01eff0f32 --- Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControlCellFormatExtensions.cs (.../DataGridViewControlCellFormatExtensions.cs) (revision 6cdb90fc3f89fe0c44b62d3be7266a0090a6b891) +++ Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControlCellFormatExtensions.cs (.../DataGridViewControlCellFormatExtensions.cs) (revision bcaba4c27e18f3551487c131816fb5c01eff0f32) @@ -39,14 +39,20 @@ /// is null. /// Thrown when the /// or the does not exist. + /// When the of the corresponding row is not of + /// the type , no formatting is applied. public static void FormatCellWithColumnStateDefinition(this DataGridViewControl dataGridViewControl, int rowIndex, int columnIndex) { if (dataGridViewControl == null) { throw new ArgumentNullException(nameof(dataGridViewControl)); } - var row = (IHasColumnStateDefinitions) dataGridViewControl.GetRowFromIndex(rowIndex).DataBoundItem; + if (!(dataGridViewControl.GetRowFromIndex(rowIndex).DataBoundItem is IHasColumnStateDefinitions row)) + { + return; + } + if (row.ColumnStateDefinitions.ContainsKey(columnIndex)) { DataGridViewColumnStateDefinition columnStateDefinition = row.ColumnStateDefinitions[columnIndex]; Index: Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewControlCellFormatExtensionsTest.cs =================================================================== diff -u -r51b64230b9b947ba32821ed104809429d469959b -rbcaba4c27e18f3551487c131816fb5c01eff0f32 --- Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewControlCellFormatExtensionsTest.cs (.../DataGridViewControlCellFormatExtensionsTest.cs) (revision 51b64230b9b947ba32821ed104809429d469959b) +++ Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewControlCellFormatExtensionsTest.cs (.../DataGridViewControlCellFormatExtensionsTest.cs) (revision bcaba4c27e18f3551487c131816fb5c01eff0f32) @@ -44,14 +44,38 @@ public void FormatCellWithColumnStateDefinition_DataGridViewControlNull_ThrowsArgumentNullException() { // Call - TestDelegate call = () => ((DataGridViewControl) null).FormatCellWithColumnStateDefinition(0, 0); + void Call() => ((DataGridViewControl) null).FormatCellWithColumnStateDefinition(0, 0); // Assert - var exception = Assert.Throws(call); + var exception = Assert.Throws(Call); Assert.AreEqual("dataGridViewControl", exception.ParamName); } [Test] + public void FormatCellWithColumnStateDefinition_RowWithoutColumnStateDefinitions_DoesNotThrow() + { + // Setup + using (var form = new Form()) + using (var dataGridViewControl = new DataGridViewControl()) + { + form.Controls.Add(dataGridViewControl); + form.Show(); + + dataGridViewControl.AddTextBoxColumn(null, "Test"); + dataGridViewControl.SetDataSource(new[] + { + new object() + }); + + // Call + void Call() => dataGridViewControl.FormatCellWithColumnStateDefinition(0, 0); + + // Assert + Assert.DoesNotThrow(Call); + } + } + + [Test] [TestCaseSource(nameof(CellFormattingStates))] public void FormatCellWithColumnStateDefinition_WithArguments_FormatsCell( bool isReadOnly, string errorText, CellStyle cellStyle) @@ -95,6 +119,8 @@ Assert.AreEqual(errorText, cell.ErrorText); Assert.AreEqual(cellStyle.BackgroundColor, cell.Style.BackColor); Assert.AreEqual(cellStyle.TextColor, cell.Style.ForeColor); + + mocks.VerifyAll(); } } }