We are using row selection in the grid and have discovered a significant issue when the following steps are taken:
Here is a partial screenshot after step 1
If the grid is reloaded with an empty array, the selector is removed:
The red arrow shows an additional anomaly where the set of fixed columns that is supposed to be on the right side is moved over by the width of the selector column.
Finally, if the grid is reloaded with one or more valid rows, all of the column configuration is lost:
It appears that the cause is the removal and then re-addition of the selector column.
Is it possible for us to change the behavior so that the column is never removed? Or can the grid be fixed not to lose the column information in this scenario?
This is a fairly critical issue since we cannot release our updated application using this grid until the issue is addressed.
I realized that I forgot to mention some fairly critical information here: our grid columns are not fixed in HTML, they are configured dynamically based on the current view's needs.
Basically, we provide a plain array of column configuration information and then configure each type of column through templates that are picked based on the type of data the column represents.
Here is q quick example of the configuration (this is not complete):
<igx-grid #grid autoGenerate="false" [pinning]="pinningConfig" [primaryKey]="primaryKey" rowSelection="multiple" cellSelection="none"> <igx-column *ngFor="let col of columns" [header]="col.caption" [headerClasses]="col.class" [field]="col.columnName" [resizable]="true" [sortable]="columnIsSortable(col)" [editable]="columnIsEditable(col)" [width]="col.widthPX" [hidden]="!col.visible" [pinned]="col.frozen" [dataType]="col.dataTypeAngular"> <ng-template igxRowSelector let-rowContext> <div class="row-selector"> <igx-checkbox [readonly]="true" [checked]="rowContext.selected" [disabled]="!gridIsEditable()"> </igx-checkbox> </div> </ng-template> <!-- Display --> <ng-template igxCell let-val let-cell="cell" *ngIf="col.formatAsDate"> <div class="grid-cellContent {{col.class}}" [ngClass]="{'notoktoedit': !cellIsEditable(cell)}">{{formatDate(col, val)}}</div> </ng-template> <ng-template igxCell let-val let-cell="cell" *ngIf="col.formatAsNumber"> <div class="grid-cellContent {{col.class}}" [ngClass]="{'notoktoedit': !cellIsEditable(cell)}">{{formatNumber(col, val)}}</div> </ng-template>
So, I think what happens is that when the grid decides to add or remove the rowSelector column, this column configuration is not re-examined.
I tried to look at which events might let me know when this happens and tried various method calls such as cdr.detectChanges and reflow, but nothing helps.
Hello,
Thank you for the provided code-snippet.
I have been looking into your question and prepared small sample with IgxGrid and two buttons. The first one would generate a non-empty data on click and the second - empty array.
On my side, everything seems to work as expected and the data is generated correctly.
Here could be found my sample for your reference. Please test it on your side and let me know how it behaves. If this is not an accurate demonstration of what you are trying to achieve please feel free to modify it and send it back to me along with steps to reproduce.
Having a working sample on my side, which I can debug, is going to be very helpful in finding the root cause of this behavior.
Thank you for your cooperation.
Looking forward to hearing from you.
Sincerely,
Teodosia Hristodorova
Associate Software Developer