Base solution for your next web application
Open Closed

How to convert asp.net zero angular primeng-datatable to grouping primeng-table datatable. #7504


User avatar
0
PMS created

Hi ,

I am getting issue when adding grouping the to primeng-datatable. same like https://www.primefaces.org/primeng/#/table/rowgroup

Please suggenst any example or demo so that this datatable behaves like grouping (https://www.primefaces.org/primeng/#/table/rowgroup) primeng-datatable like below and its has to be maintain the functionality like pagination sorting etc in default primeng-table

**here is my code of angular componate html file **

<div class="primeng-datatable-container col-12" [busyIf]="primengTableHelper.isLoading"> <p-table #dataTable (onLazyLoad)="getCruiseDefaultSeasons($event)" [value]="primengTableHelper.records" rows="{{primengTableHelper.defaultRecordsCountPerPage}}" [paginator]="false" [lazy]="true" [scrollable]="true" ScrollWidth="100%" [responsive]="primengTableHelper.isResponsive" [resizableColumns]="primengTableHelper.resizableColumns"> <ng-template pTemplate="header"> <tr> <th style="width: 130px" [hidden]="!isGrantedAny('Pages.CruiseDefaultSeasons.Edit', 'Pages.CruiseDefaultSeasons.Delete')"> {{l('Actions')}}</th> <th style="width: 150px" pSortableColumn="departureYear"> {{l('DepartureYear')}} <p-sortIcon field="cruiseDefaultSeasons.departureYear"></p-sortIcon> </th> <th style="width: 150px" pSortableColumn="seasonGroup"> {{l('SeasonGroup')}} <p-sortIcon field="cruiseDefaultSeasons.seasonGroup"></p-sortIcon> </th> <th style="width: 150px" pSortableColumn="departureDate"> {{l('DepartureDate')}} <p-sortIcon field="cruiseDefaultSeasons.departureDate"></p-sortIcon> </th>

                            &lt;/tr&gt;
                        &lt;/ng-template&gt;
                        &lt;ng-template pTemplate=&quot;body&quot; let-record=&quot;$implicit&quot; let-rowIndex=&quot;rowIndex&quot;&gt;

                            &lt;!-- &lt;ng-container *ngIf=&#39;checkGroupInArray(record.cruiseDefaultSeasons.seasonGroup)&#39;&gt;
                                &lt;tr &gt;
                                    &lt;td colspan=&quot;4&quot;&gt;
                                        {{record.cruiseDefaultSeasons.seasonGroup}}
                                    &lt;/td&gt;
                                &lt;/tr&gt; 

                              
                            &lt;/ng-container&gt;-->
                            &lt;tr&gt;

                                &lt;td style=&quot;width: 130px&quot;
                                    [hidden]=&quot;!isGrantedAny(&#39;Pages.CruiseDefaultSeasons.Edit&#39;, &#39;Pages.CruiseDefaultSeasons.Delete&#39;)&quot;&gt;
                                    &lt;div class=&quot;btn-group dropdown&quot; dropdown container=&quot;body&quot;&gt;
                                        &lt;button class=&quot;dropdown-toggle btn btn-sm btn-primary&quot; dropdownToggle&gt;
                                            &lt;i class=&quot;fa fa-cog&quot;&gt;&lt;/i&gt;&lt;span class=&quot;caret&quot;&gt;&lt;/span&gt;
                                            {{l("Actions")}}
                                        &lt;/button&gt;
                                        &lt;ul class=&quot;dropdown-menu&quot; *dropdownMenu&gt;
                                            &lt;li&gt;
                                                &lt;a href=&quot;javascript:;&quot;
                                                    (click)=&quot;viewCruiseDefaultSeasonsModal.show(record)&quot;&gt;{{l('View')}}&lt;/a&gt;
                                            &lt;/li&gt;
                                            &lt;li&gt;
                                                &lt;a href=&quot;javascript:;&quot;
                                                    *ngIf=&quot;permission.isGranted(&#39;Pages.CruiseDefaultSeasons.Edit&#39;)&quot;
                                                    (click)=&quot;createOrEditCruiseDefaultSeasonsModal.show(record.cruiseDefaultSeasons.id)&quot;&gt;{{l('Edit')}}&lt;/a&gt;
                                            &lt;/li&gt;
                                            &lt;li&gt;
                                                &lt;a href=&quot;javascript:;&quot;
                                                    *ngIf=&quot;permission.isGranted(&#39;Pages.CruiseDefaultSeasons.Delete&#39;)&quot;
                                                    (click)=&quot;deleteCruiseDefaultSeasons(record.cruiseDefaultSeasons)&quot;&gt;{{l('Delete')}}&lt;/a&gt;
                                            &lt;/li&gt;
                                            &lt;li&gt;
                                                &lt;a href=&quot;javascript:;&quot; *ngIf=&quot;entityHistoryEnabled&quot;
                                                    (click)=&quot;showHistory(record.cruiseDefaultSeasons)&quot;&gt;{{l('History')}}&lt;/a&gt;
                                            &lt;/li&gt;
                                        &lt;/ul&gt;
                                    &lt;/div&gt;
                                &lt;/td&gt;
                                &lt;td style=&quot;width:150px&quot;&gt;
                                    &lt;span class=&quot;ui-column-title&quot;&gt; {{l('DepartureYear')}}&lt;/span&gt;
                                    {{record.cruiseDefaultSeasons.departureYear}}
                                &lt;/td&gt;
                                &lt;td style=&quot;width:150px&quot;&gt;
                                    &lt;span class=&quot;ui-column-title&quot;&gt; {{l('SeasonGroup')}}&lt;/span&gt;
                                    {{record.cruiseDefaultSeasons.seasonGroup}}
                                &lt;/td&gt;
                                &lt;td style=&quot;width:150px&quot;&gt;
                                    &lt;span class=&quot;ui-column-title&quot;&gt; {{l('DepartureDate')}}&lt;/span&gt;
                                    &lt;span *ngIf=&quot;record.cruiseDefaultSeasons.departureDate&quot;&gt;
                                        {{record.cruiseDefaultSeasons.departureDate | momentFormat:'L'}}
                                    &lt;/span&gt;
                                    &lt;span *ngIf=&quot;!record.cruiseDefaultSeasons.departureDate&quot;&gt;-&lt;/span&gt;
                                &lt;/td&gt;

                            &lt;/tr&gt;
                        &lt;/ng-template&gt;
                    &lt;/p-table&gt;
                    &lt;div class=&quot;primeng-no-data&quot; *ngIf=&quot;primengTableHelper.totalRecordsCount == 0&quot;&gt;
                        {{l('NoData')}}
                    &lt;/div&gt;
                    &lt;div class=&quot;primeng-paging-container&quot;&gt;
                        &lt;p-paginator rows=&quot;{{primengTableHelper.defaultRecordsCountPerPage}}&quot; #paginator
                            (onPageChange)=&quot;getCruiseDefaultSeasons($event)&quot;
                            [totalRecords]=&quot;primengTableHelper.totalRecordsCount&quot;
                            [rowsPerPageOptions]=&quot;primengTableHelper.predefinedRecordsCountPerPage&quot;&gt;
                        &lt;/p-paginator&gt;
                        &lt;span class=&quot;total-records-count&quot;&gt;
                            {{l('TotalRecordsCount', primengTableHelper.totalRecordsCount)}}
                        &lt;/span&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                
               

ts file code :--

getCruiseDefaultSeasons(event?: LazyLoadEvent) {
        if (this.primengTableHelper.shouldResetPaging(event)) {
            this.paginator.changePage(0);
            return;
        }

        this.primengTableHelper.showLoadingIndicator();

        this._cruiseDefaultSeasonsServiceProxy.getAll(
            this.filterText,
            this.primengTableHelper.getSorting(this.dataTable),
            this.primengTableHelper.getSkipCount(this.paginator, event),
            this.primengTableHelper.getMaxResultCount(this.paginator, event)
        ).subscribe(result => {

            result.items.forEach(element => {

                this.customSeasonGroupArray.push({
                    id: element.cruiseDefaultSeasons.id,
                    departureYear: element.cruiseDefaultSeasons.departureYear,
                    seasonGroup: element.cruiseDefaultSeasons.seasonGroup,
                    departureDate: element.cruiseDefaultSeasons.departureDate
                });

            });
            this.isAddedInArray=[];
            this.primengTableHelper.totalRecordsCount = result.totalCount;
            this.primengTableHelper.records = result.items;
            this.primengTableHelper.hideLoadingIndicator();
        });
    }

even I put the boolien function for the check true or false then give error..

ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. its check value in grid loop ... true or false

Here is the code for the **GroupInArray **

checkGroupInArray(name: string): any {
        console.log('name', name);
        console.log('this.isAddedInArray', this.isAddedInArray);
        console.log('this.isAddedInArray.some(x => x === name)', this.isAddedInArray.some(x => x === name));

        if (this.isAddedInArray.some(x => x === name)) {
                 return true;           
        } else {
          
            this.isAddedInArray.push(name);
            return false;
        }
    }

Thanks in advance !!


2 Answer(s)
  • User Avatar
    0
    PMS created

    Any update ?

  • User Avatar
    0
    ismcagdas created
    Support Team

    Hi @PMS

    Unfortunately we don't have such an example. When I check the grouping feature on PrimeNG documentation, it seems like it doesn't support grouping and paging together at the same time.