IgxGrid では、列の sortStrategy インプットに ISortingStrategy を実装するクラスを指定することで、独自のソートルールを適用することができます。

下記例では、IgxGrid 2列目(ReorderLevel 列)に独自のソートルールを指定しています。独自のソートルールは CustomSortStrategy クラスの sort メソッドに実装されており、昇順と降順を逆転する処理が記述されています。

<igx-grid #grid1 [data]="data" [primaryKey]="'ProductID'" width="500px" height="500px" dataType="number">
  <igx-column field="ProductID" header="Product ID"
  [sortable]="true">
  </igx-column>
  <igx-column field="ReorderLevel" header="ReorderLever" dataType="number"
  [sortable]="true" [sortStrategy]="customSortStrategy">
  </igx-column>
  <igx-column field="ProductName" header="ProductName" [dataType]="'string'"
  [sortable]="true">
  </igx-column>
</igx-grid>

export class AppComponent implements OnInit {
  title = 'igx-grid-custom-sort';
  @ViewChild('grid1') grid1: IgxGridComponent;
  public data: any[];
  public customSortStrategy: ISortingStrategy;

  ngOnInit(): void {
    this.data = DATA;
    // customSortStrategy は、2列目の sortStrategy インプットにバインドするオブジェクト
    this.customSortStrategy = new CustomSortStrategy();
  }
}
export class CustomSortStrategy implements ISortingStrategy {
  sort(data: any[], fieldName: string, dir: SortingDirection): Array<any> {
    const key = fieldName;
    const reverse = (dir === SortingDirection.Desc ? 1 : -1); // 昇順と降順を入れ替えている。
    const cmpFunc = (obj1, obj2) => {
      return this.compareObjects(obj1, obj2, key, reverse);
    };
    return data.sort(cmpFunc);
  }
  ...(省略 - 詳細は添付サンプルを参照。)...
}

リファレンス

Grid ソートの概要
https://jp.infragistics.com/products/ignite-ui-angular/angular/components/grid/sorting

Tagged:

製品について

Ignite UI for Angular