From 916bad18d43542dcf3dcfbd3abbd54984c331571 Mon Sep 17 00:00:00 2001 From: Galina Edinakova Date: Fri, 5 Dec 2025 15:52:53 +0200 Subject: [PATCH 1/3] test(CSV): Verify column headers are printed --- .../src/services/csv/csv-exporter-grid.spec.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/projects/igniteui-angular/grids/core/src/services/csv/csv-exporter-grid.spec.ts b/projects/igniteui-angular/grids/core/src/services/csv/csv-exporter-grid.spec.ts index 3c8425f531c..bcd5f168865 100644 --- a/projects/igniteui-angular/grids/core/src/services/csv/csv-exporter-grid.spec.ts +++ b/projects/igniteui-angular/grids/core/src/services/csv/csv-exporter-grid.spec.ts @@ -21,6 +21,7 @@ import { IgxPivotGridComponent } from 'igniteui-angular/grids/pivot-grid'; import { IgxGridNavigationService, IgxPivotNumericAggregate } from 'igniteui-angular/grids/core'; import { DefaultSortingStrategy, FilteringExpressionsTree, FilteringLogic, IgxNumberFilteringOperand, IgxStringFilteringOperand, SortingDirection } from 'igniteui-angular/core'; import { CSVWrapper } from './csv-verification-wrapper.spec'; +import { OneGroupThreeColsGridComponent } from '../../../../../test-utils/grid-mch-sample.spec'; describe('CSV Grid Exporter', () => { let exporter: IgxCsvExporterService; @@ -388,6 +389,20 @@ describe('CSV Grid Exporter', () => { expect(ExportUtilities.saveBlobToFile).toHaveBeenCalledTimes(1); }); + it('should print column headers when available when column groups are present.', async () => { + const fix = TestBed.createComponent(OneGroupThreeColsGridComponent); + fix.componentInstance.data = []; + fix.detectChanges(); + + fix.componentInstance.grid.getColumnByName('City').header = 'Test Header'; + fix.detectChanges(); + + const grid = fix.componentInstance.grid; + + const wrapper = await getExportedData(grid, options); + wrapper.verifyData('Country,Region,Test Header', 'Only headers should be exported.'); + }); + describe('Tree Grid CSV export', () => { let fix; let treeGrid: IgxTreeGridComponent; From 989de418b14f68f2fc071ec6635ee439ed1fff59 Mon Sep 17 00:00:00 2001 From: Galina Edinakova Date: Fri, 5 Dec 2025 15:54:24 +0200 Subject: [PATCH 2/3] fix(CSV): Always print column headers if available. --- .../grids/core/src/services/csv/char-separated-value-data.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/igniteui-angular/grids/core/src/services/csv/char-separated-value-data.ts b/projects/igniteui-angular/grids/core/src/services/csv/char-separated-value-data.ts index 9e0b3624e86..60fcfffa898 100644 --- a/projects/igniteui-angular/grids/core/src/services/csv/char-separated-value-data.ts +++ b/projects/igniteui-angular/grids/core/src/services/csv/char-separated-value-data.ts @@ -55,7 +55,7 @@ export class CharSeparatedValueData { /* When column groups are present, always use the field as it indicates the group the column belongs to. * Otherwise, in PivotGrid scenarios we can end up with many duplicated column names without a hint what they represent. */ - columns.map(c => c.columnGroupParent ? c.field : c.header ?? c.field) : + columns.map(c => c.header ?? c.field) : keys; this._headerRecord = this.processHeaderRecord(headers, this._data.length); From 6f03571a4af6f26a223caf94080a71e15a56b90f Mon Sep 17 00:00:00 2001 From: Galina Edinakova Date: Fri, 5 Dec 2025 16:04:08 +0200 Subject: [PATCH 3/3] chore(*): Removed irrelevant comment. --- .../grids/core/src/services/csv/char-separated-value-data.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/projects/igniteui-angular/grids/core/src/services/csv/char-separated-value-data.ts b/projects/igniteui-angular/grids/core/src/services/csv/char-separated-value-data.ts index 60fcfffa898..660f6098e9c 100644 --- a/projects/igniteui-angular/grids/core/src/services/csv/char-separated-value-data.ts +++ b/projects/igniteui-angular/grids/core/src/services/csv/char-separated-value-data.ts @@ -52,9 +52,6 @@ export class CharSeparatedValueData { this._escapeCharacters.push(this._delimiter); const headers = columns && columns.length ? - /* When column groups are present, always use the field as it indicates the group the column belongs to. - * Otherwise, in PivotGrid scenarios we can end up with many duplicated column names without a hint what they represent. - */ columns.map(c => c.header ?? c.field) : keys;