我有一个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的字段旁边。
请帮忙。
答案 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
。当我使用模板显示/编辑数据时,我仍然会将对象作为代码的值。