dotnet/wpf · error · ArgumentNullException
SR.DataGrid_NullColumn
Error message
SR.DataGrid_NullColumn
What it means
DataGridColumnCollection.InsertItem throws ArgumentNullException with DataGrid_NullColumn when a null DataGridColumn is inserted into the grid's Columns collection. The collection refuses null entries to keep the column list well-formed.
Solutions
- Check columns for null before adding; fix the source that produced null
- Filter nulls: columns.Where(c => c != null)
- Validate factory/parse code that constructs DataGridColumn instances
- Create and add a concrete column (DataGridTextColumn, etc.) instead of null
Example fix
// before grid.Columns.Add(GetColumn()); // GetColumn() may return null // after var col = GetColumn(); if (col != null) grid.Columns.Add(col);
Defensive patterns
Strategy: validation
Validate before calling
if (columns.Any(c => c == null))
throw new InvalidOperationException("Column list contains null entries before adding to DataGrid."); Type guard
bool IsAddable(DataGridColumn c) => c != null && c.DataGridOwner == null;
Prevention
- Check factory methods never return null columns
- Filter nulls before bulk-adding columns
- Treat null as a bug: DataGrid columns must always be concrete instances
When it happens
Trigger: Calling dataGrid.Columns.Add(null), Columns.Insert(index, null), or adding a collection containing null columns; data binding a column list that contains nulls.
Common situations: Building column lists dynamically where a factory returned null; deserializing column definitions with missing entries; initializer syntax with a failed constructor returning null via helper method.
Related errors
- SR.DataGrid_ColumnIndexOutOfRange
- SR.DataGrid_DisplayIndexOutOfRange
- annotation component
- ArgumentNullException
- ArgumentNullException(argName)
AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14).
Data as JSON: /api/errors/aaebd1cf138d4d6f.
Report an issue: GitHub.
Appendix: source
Thrown at src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/DataGridColumnCollection.cs:40
DisplayIndexMap = new List<int>(5);
_dataGridOwner = dataGridOwner;
RealizedColumnsBlockListForNonVirtualizedRows = null;
RealizedColumnsDisplayIndexBlockListForNonVirtualizedRows = null;
RebuildRealizedColumnsBlockListForNonVirtualizedRows = true;
RealizedColumnsBlockListForVirtualizedRows = null;
RealizedColumnsDisplayIndexBlockListForVirtualizedRows = null;
RebuildRealizedColumnsBlockListForVirtualizedRows = true;
}
#region Protected Overrides
protected override void InsertItem(int index, DataGridColumn item)
{
if (item == null)
{
throw new ArgumentNullException(nameof(item), SR.DataGrid_NullColumn);
}
if (item.DataGridOwner != null)
{
throw new ArgumentException(SR.Format(SR.DataGrid_InvalidColumnReuse, item.Header), nameof(item));
}
if (DisplayIndexMapInitialized)
{
ValidateDisplayIndex(item, item.DisplayIndex, true);
}
base.InsertItem(index, item);
item.CoerceValue(DataGridColumn.IsFrozenProperty);
}
protected override void SetItem(int index, DataGridColumn item)
{View on GitHub (pinned to 81131a70a4)