按剑道角网格中的对象进行排序

时间:2017-06-19 20:57:28

标签: angular kendo-grid

我有一个Kendo Angular网格,其中一个列绑定到一个对象,因此编辑器是一个下拉列表。我想按这个对象的属性排序而不是对象本身,但是没有看到任何明显的方法来做到这一点。我正在寻找一个" sortby"在kendo-grid-column中的属性,所以我可以输入像" CabinetSupplier.Name" (CabinetSupplier是对象,Name是属性)。以下是我的列配置:

<kendo-grid-column field="CabinetSupplier" title="Cabinet Supplier" sort>
 <ng-template kendoGridFilterCellTemplate let-filter>
  <kendo-dropdown-filter [filter]="filter"
                         [data]="cabinetsService.cabinetSuppliers | filter:[{Disabled: false}]"
                         textField="Name"
                         valueField="Id"
                         (filterSelectionChange)="handleFilterSelectionChange($event)"
                         filterBy="CabinetSupplier.Id">
  </kendo-dropdown-filter>
 </ng-template>
 <ng-template kendoGridCellTemplate let-dataItem>
  {{dataItem.CabinetSupplier.Name}}
 </ng-template>
</kendo-grid-column>

我希望通用解决方案不像:

protected sortChange(sort: SortDescriptor[]): void
{
    sort.map((item) =>
    {
        if (item.field == "CabinetSupplier")
        {
            item.field = "CabinetSupplier.Name";
        }
    });

    this.sort = sort;
}

除了非通用之外,我还要考虑到这样一个事实,即每次点击标题时它都会尝试按CabinetSupplier排序,这样就会创建一个需要删除的新排序和CabinetSupplier。名称排序已更改。此外,字段标题旁边的箭头指示符不会出现,因为它们会出现在名为CabinetSupplier而非CabinetSupplier.Name的字段旁边。

请帮忙。

2 个答案:

答案 0 :(得分:1)

您需要sortChange sortable在您的网格中。

[sortable]="{
            allowUnsort: allowUnsort,
            mode: multiple ? 'multiple' : 'single'
            }"
          [sort]="sort"
          (sortChange)="sortChange($event)"

在sortChange内部,您可以使用CabinetSupplier.Name

进行排序

更多信息 http://www.telerik.com/kendo-angular-ui/components/grid/sorting/

答案 1 :(得分:1)

我从Telerik的优秀支持团队那里得到了答案,所以我会分享它以帮助其他人。他们说列的字段设置用于排序,过滤和分组等操作,因此在我的场景中我应该将其设置为CabinetSupplier.Name。当我使用模板显示/编辑数据时,我仍然会将对象作为代码的值。