使用基本模型禁用 ag-grid 中的字母排序
Disable alphabetical sorting in ag-grid using the basic model
我使用 ag-grid 的服务器端排序。到目前为止,我将 enableServerSideSorting 属性 设置为 true。但是版本升级后这个属性不可用了。
我使用 onSortChanged 事件来捕获网格的排序状态。我想在服务器端处理这种排序。所以 ag-grid 只显示来自服务器的原始顺序的数据。现在我对网格外的数据进行排序,然后 ag-grid 再次按字母顺序排序。
我为此创建了一个示例。有两个组件 属性 setSortParams,我在其中设置排序和数据,我在其中获取已排序的数据。
如何防止重复排序?
const ExternalGrid = ({ data, setSortParams }) => {
const gridOptions = {
columnDefs: [
{
headerName: "Quantity",
field: "quantity",
sortable: true
}
],
defaultColDef: {
sortable: true
}
};
const onSortChanged = params => {
const sortModel = params.api.getSortModel();
setSortParams([
sortModel.length > 0,
sortModel.length > 0 ? sortModel[0].sort === "desc" : false
]);
};
return (
<div
className="ag-theme-balham"
style={{
height: "180px",
width: "300px"
}}
>
<AgGridReact
gridOptions={gridOptions}
modules={AllCommunityModules}
onSortChanged={onSortChanged}
rowData={data}
/>
</div>
);
};
示例:https://codesandbox.io/s/ag-grid-server-side-sorting-chy7j
你可以在例子中看到,我显示了table下的数据。我的目标是它在 table 中具有相同的顺序,无论我点击 table header.
设置的顺序如何
在使用服务器端行模型时,不应直接分配 rowData
(rowData={data}
)。相反,创建 ServerSideDatasource
。当您对任何列进行排序时,您将能够获取详细信息作为 getRows
方法的参数。
您可以使用它向服务器提供排序信息。
参考:Implementing the Server-side Datasource
看看这个 plunk:https://plnkr.co/edit/z8KzsZ8sAcCe9tYWJedS?p=preview。
当您对列进行排序时,观察到您通过 dataSource.getRows
方法中的 params.request.sortModel
获取了详细信息。
[{
colId: "athlete"
sort: "asc"
}]
如果您在每个列定义中实现以下比较器,则网格在排序时不会修改行顺序:
columnDefs: [
{
headerName: "Quantity",
field: "quantity",
sortable: true,
comparator: (valueA, valueB, nodeA, nodeB, isInverted) => 0
}
],
我使用 ag-grid 的服务器端排序。到目前为止,我将 enableServerSideSorting 属性 设置为 true。但是版本升级后这个属性不可用了。
我使用 onSortChanged 事件来捕获网格的排序状态。我想在服务器端处理这种排序。所以 ag-grid 只显示来自服务器的原始顺序的数据。现在我对网格外的数据进行排序,然后 ag-grid 再次按字母顺序排序。
我为此创建了一个示例。有两个组件 属性 setSortParams,我在其中设置排序和数据,我在其中获取已排序的数据。
如何防止重复排序?
const ExternalGrid = ({ data, setSortParams }) => {
const gridOptions = {
columnDefs: [
{
headerName: "Quantity",
field: "quantity",
sortable: true
}
],
defaultColDef: {
sortable: true
}
};
const onSortChanged = params => {
const sortModel = params.api.getSortModel();
setSortParams([
sortModel.length > 0,
sortModel.length > 0 ? sortModel[0].sort === "desc" : false
]);
};
return (
<div
className="ag-theme-balham"
style={{
height: "180px",
width: "300px"
}}
>
<AgGridReact
gridOptions={gridOptions}
modules={AllCommunityModules}
onSortChanged={onSortChanged}
rowData={data}
/>
</div>
);
};
示例:https://codesandbox.io/s/ag-grid-server-side-sorting-chy7j
你可以在例子中看到,我显示了table下的数据。我的目标是它在 table 中具有相同的顺序,无论我点击 table header.
设置的顺序如何在使用服务器端行模型时,不应直接分配 rowData
(rowData={data}
)。相反,创建 ServerSideDatasource
。当您对任何列进行排序时,您将能够获取详细信息作为 getRows
方法的参数。
您可以使用它向服务器提供排序信息。
参考:Implementing the Server-side Datasource
看看这个 plunk:https://plnkr.co/edit/z8KzsZ8sAcCe9tYWJedS?p=preview。
当您对列进行排序时,观察到您通过 dataSource.getRows
方法中的 params.request.sortModel
获取了详细信息。
[{
colId: "athlete"
sort: "asc"
}]
如果您在每个列定义中实现以下比较器,则网格在排序时不会修改行顺序:
columnDefs: [
{
headerName: "Quantity",
field: "quantity",
sortable: true,
comparator: (valueA, valueB, nodeA, nodeB, isInverted) => 0
}
],