How to sort data in a PrimeNG DataTable with Row Grouping

前端 未结 3 692
滥情空心
滥情空心 2021-02-10 21:30

What I want to do is to sort the data already grouped in alphabetical order or custom order. I used the sortField attribute which specify the groupheader order but

相关标签:
3条回答
  • 2021-02-10 22:10

    I was facing the same issue.I have used custom sorting.Below is the code:

    In Template:

    <p-column   field="color" header="color"  sortable="custom" (sortFunction)="sortByColor($event,sortOrder)"></p-column>
    

    Below is the sortByColor function in typescript:

      sortOrder = 1;//1 means ascending order, 2 means descending order
      sortByField(e, order) {   
        this.cars.Data.sort(function (a, b) {
          let aGroup = a.name.toLowerCase();
          let bGroup = b.name.toLowerCase();
          if (aGroup > bGroup) return 1;
          else if (aGroup < bGroup) return -1;
          let aSort = a.color.toLowerCase();
          let bSort = b.color.toLowerCase();
          if (aGroup == bGroup) {
            //ascending order
            if (order == 1 && aSort < bSort) {
              return -1;
            }
            //ascending order     
            else if (order == 1 && aSort > bSort) {
              return 1;
            }
            //descending order   
            else if (order == 2 && aSort > bSort) {
              return -1;
            }
            //descending order 
            else if (order == 2 && aSort < bSort) {
              return 1;
            }
    
          }
          return 1
        });   
        this.sortOrder = this.sortOrder == 1 ? 2 : 1;
      }
    

    This is working for me.Hope this will work in your case also.

    0 讨论(0)
  • 2021-02-10 22:23

    I have the same issues. I have added customized sort to solve this issues

    To add a customized sort

    <p-column   field="color" header="color"  sortable="custom" (sortFunction)="sortByColor($event)"></p-column>
    

    In the typescript create a customSort

    sortByColor(e) {
        this.cars.sort(function (a, b) {
          let aGroup = a.name.toLowerCase();
          let bGroup = b.name.toLowerCase();
          if (aGroup > bGroup) return 1;
          if (aGroup < bGroup) return -1;
          let aSort = a.color.toLowerCase();
          let bSort = b.color.toLowerCase();
          if (aSort > bSort) return 1;
          if (aSort < bSort) return -1;
          return 0
        });
      }
    
    0 讨论(0)
  • 2021-02-10 22:31

    For those who have the problem with TurboTable <p-table>, here is the solution:

    <p-table sortField="name" sortMode="single" (onSort)="onSort($event)" (sortFunction)="customSort($event)" [customSort]="true">
    

    OnSort() implementation:

    onSort() {
       // function to properly work with turbotable and rowgroup, see: https://www.primefaces.org/primeng/#/table/rowgroup 
       this.updateRowGroupMetaData();
    }
    

    customSort() implementation:

    customSort(e) {
      this.budgets.sort((a, b) => {
        const aGroup = a.name.toLowerCase();
        const bGroup = b.name.toLowerCase();
        if (aGroup > bGroup) { return 1; }
        if (aGroup < bGroup) { return -1; }
        const aSort = a.color;
        const bSort = b.color;
        if (aSort > bSort) { return 1; }
        if (aSort < bSort) { return -1; }
        return 0;
      });
    }
    
    0 讨论(0)
提交回复
热议问题