{"record":{"id":"aaebd1cf138d4d6f","repo":"dotnet/wpf","slug":"sr-datagrid-nullcolumn","errorCode":null,"errorMessage":"SR.DataGrid_NullColumn","messagePattern":"SR\\.DataGrid_NullColumn","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/DataGridColumnCollection.cs","lineNumber":40,"sourceCode":"            DisplayIndexMap = new List<int>(5);\n            _dataGridOwner = dataGridOwner;\n\n            RealizedColumnsBlockListForNonVirtualizedRows = null;\n            RealizedColumnsDisplayIndexBlockListForNonVirtualizedRows = null;\n            RebuildRealizedColumnsBlockListForNonVirtualizedRows = true;\n\n            RealizedColumnsBlockListForVirtualizedRows = null;\n            RealizedColumnsDisplayIndexBlockListForVirtualizedRows = null;\n            RebuildRealizedColumnsBlockListForVirtualizedRows = true;\n        }\n\n        #region Protected Overrides\n\n        protected override void InsertItem(int index, DataGridColumn item)\n        {\n            if (item == null)\n            {\n                throw new ArgumentNullException(nameof(item), SR.DataGrid_NullColumn);\n            }\n\n            if (item.DataGridOwner != null)\n            {\n                throw new ArgumentException(SR.Format(SR.DataGrid_InvalidColumnReuse, item.Header), nameof(item));\n            }\n\n            if (DisplayIndexMapInitialized)\n            {\n                ValidateDisplayIndex(item, item.DisplayIndex, true);\n            }\n\n            base.InsertItem(index, item);\n            item.CoerceValue(DataGridColumn.IsFrozenProperty);\n        }\n\n        protected override void SetItem(int index, DataGridColumn item)\n        {","sourceCodeStart":22,"sourceCodeEnd":58,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/DataGridColumnCollection.cs#L22-L58","documentation":"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.","triggerScenarios":"Calling dataGrid.Columns.Add(null), Columns.Insert(index, null), or adding a collection containing null columns; data binding a column list that contains nulls.","commonSituations":"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.","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"],"exampleFix":"// before\ngrid.Columns.Add(GetColumn()); // GetColumn() may return null\n// after\nvar col = GetColumn();\nif (col != null) grid.Columns.Add(col);","handlingStrategy":"validation","validationCode":"if (columns.Any(c => c == null))\n    throw new InvalidOperationException(\"Column list contains null entries before adding to DataGrid.\");","typeGuard":"bool IsAddable(DataGridColumn c) => c != null && c.DataGridOwner == null;","tryCatchPattern":null,"preventionTips":["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"],"tags":["wpf","datagrid","null-argument","columns"],"backgroundTag":"null-argument","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}