如何使排序键在 ag-grid 中不敏感?
How to make sorting key insensitive in ag-grid?
我在一些网格中工作,我注意到所有网格的排序都是关键敏感的,有没有办法改变它。这是我的代码的一部分。
columnDefs = [
{
headerName: 'Id', field: 'id', sort: 'asc', sortable: true, filter: true,
checkboxSelection: true, resizable: true,
},
{
headerName: 'Name', field: 'name', sortable: true, filter: true,
checkboxSelection: false, editable: true, resizable: true,
},
{
headerName: 'Description', field: 'description', sortable: true, filter: true,
checkboxSelection: false, editable: true, resizable: true,
},
];
感谢您提供的任何可能的帮助。
这就是我通过##wentjun##实现解决方案的方式:
constructor(private dialog: MatDialog, private adminService: AdminService) {}
columnDefs = [
{
headerName: 'Id', field: 'id', sortable: true, filter: true,
checkboxSelection: true, resizable: true,
},
{
headerName: 'Name', field: 'name', sortable: true, filter: true,
checkboxSelection: false, editable: true, resizable: true,
comparator: this.customComparator,
},
{
headerName: 'Description', field: 'description', sortable: true, filter: true,
checkboxSelection: false, editable: true, resizable: true,
},
];
customComparator(valueA, valueB) {
return valueA.toLowerCase().localeCompare(valueB.toLowerCase());
}
这可以通过在需要 case-insensitive 排序的特定列上使用 custom sorting function 来完成。
例如,对于您的 columnDefs
,如果您需要对 name
列进行大小写排序,我们将 customComparator
作为 comparator
的值属性。在你的 ngOnInit 中,
this.columnDefs = [
{
headerName: 'Name',
field: 'name',
sort: 'asc', // optional, allows grid column to be sorted on init
comparator: customComparator
},
// other columns
];
然后,我们定义customComparator,使其执行case-insentitive排序。我们通过在自定义比较器上将值转换为小写来实现。
const customComparator = (valueA, valueB) => {
return valueA.toLowerCase().localeCompare(valueB.toLowerCase());
};
编辑:我从原始的 ag-grid 演示中分叉并重新创建了一个 demo 来演示上述比较器的用法。相关细节参考constructor()方法
2020-07 年更新,agTextColumnFilter
默认的 ag-Grid 过滤器接受参数。其中之一是 caseSensitive
。
See sample
请注意,此时您只需将GridOptions
中的accentedSort
属性设置为true
即可实现不区分大小写的排序。 See here for more information.
如果您使用 wentjun 的自定义比较器解决方案,请确保仅将其应用于字符串列,或者在应用于所有列时,检查值是否为字符串。否则排序将不再适用于基于数字的列:
const customLowerCaseComparator = (valueA, valueB) => {
if (typeof valueA === 'string') {
return valueA.toLowerCase().localeCompare(valueB.toLowerCase());
}
return (valueA > valueB? 1 : (valueA < valueB ? -1 : 0));
};
我在一些网格中工作,我注意到所有网格的排序都是关键敏感的,有没有办法改变它。这是我的代码的一部分。
columnDefs = [
{
headerName: 'Id', field: 'id', sort: 'asc', sortable: true, filter: true,
checkboxSelection: true, resizable: true,
},
{
headerName: 'Name', field: 'name', sortable: true, filter: true,
checkboxSelection: false, editable: true, resizable: true,
},
{
headerName: 'Description', field: 'description', sortable: true, filter: true,
checkboxSelection: false, editable: true, resizable: true,
},
];
感谢您提供的任何可能的帮助。
这就是我通过##wentjun##实现解决方案的方式:
constructor(private dialog: MatDialog, private adminService: AdminService) {}
columnDefs = [
{
headerName: 'Id', field: 'id', sortable: true, filter: true,
checkboxSelection: true, resizable: true,
},
{
headerName: 'Name', field: 'name', sortable: true, filter: true,
checkboxSelection: false, editable: true, resizable: true,
comparator: this.customComparator,
},
{
headerName: 'Description', field: 'description', sortable: true, filter: true,
checkboxSelection: false, editable: true, resizable: true,
},
];
customComparator(valueA, valueB) {
return valueA.toLowerCase().localeCompare(valueB.toLowerCase());
}
这可以通过在需要 case-insensitive 排序的特定列上使用 custom sorting function 来完成。
例如,对于您的 columnDefs
,如果您需要对 name
列进行大小写排序,我们将 customComparator
作为 comparator
的值属性。在你的 ngOnInit 中,
this.columnDefs = [
{
headerName: 'Name',
field: 'name',
sort: 'asc', // optional, allows grid column to be sorted on init
comparator: customComparator
},
// other columns
];
然后,我们定义customComparator,使其执行case-insentitive排序。我们通过在自定义比较器上将值转换为小写来实现。
const customComparator = (valueA, valueB) => {
return valueA.toLowerCase().localeCompare(valueB.toLowerCase());
};
编辑:我从原始的 ag-grid 演示中分叉并重新创建了一个 demo 来演示上述比较器的用法。相关细节参考constructor()方法
2020-07 年更新,agTextColumnFilter
默认的 ag-Grid 过滤器接受参数。其中之一是 caseSensitive
。
See sample
请注意,此时您只需将GridOptions
中的accentedSort
属性设置为true
即可实现不区分大小写的排序。 See here for more information.
如果您使用 wentjun 的自定义比较器解决方案,请确保仅将其应用于字符串列,或者在应用于所有列时,检查值是否为字符串。否则排序将不再适用于基于数字的列:
const customLowerCaseComparator = (valueA, valueB) => {
if (typeof valueA === 'string') {
return valueA.toLowerCase().localeCompare(valueB.toLowerCase());
}
return (valueA > valueB? 1 : (valueA < valueB ? -1 : 0));
};