问题原因是设置了 formatter 方法之后,SlickGrid 将使用 formatter 对象的返回值进行排序和过滤操作,而不是原始的数据值。因此,如果您的列数据是格式化的,那么列过滤器将无法正常工作。
为了解决这个问题,可以使用 Angular Slickgrid 提供的onSearchChange
和dataView.refresh
方法自定义一个搜索过滤器。在这个过滤器中,我们可以自己处理筛选器输入和数据值的比较逻辑。
下面是一个示例代码:
import { Component, OnInit } from '@angular/core';
import { SlickGridConfig } from 'angular-slickgrid';
import { CustomDataView } from './custom-data-view';
@Component({
selector: 'my-app',
template: `
`
})
export class AppComponent implements OnInit {
columnDefinitions: any[];
dataset: any[];
dataView: any;
gridOptions: SlickGridConfig = {};
ngOnInit(): void {
this.columnDefinitions = [
// your column definitions here...
{
id: 'formattedColumn',
name: 'Formatted Column',
field: 'myData',
formatter: this.customFormatter
}
];
this.dataset = [
{
id: 1,
myData: '123'
},
{
id: 2,
myData: '456'
},
{
id: 3,
myData: '789'
}
];
}
angularGridReady(angularGrid: any): void {
const dataView = new CustomDataView();
dataView.setItems(this.dataset);
this.gridOptions = angularGrid.gridOptions;
this.gridOptions.enableFiltering = false;
this.gridOptions.dataView = dataView;
this.gridOptions.enableAutoResize = true;