我正在尝试将isRowSelectable
动态传递给AgGridReact
。在以下玩具示例中,您希望单击“切换条件”按钮将更改网格中具有复选框的项目集。而是,网格保持不变。
屏幕截图:
interface Item { name: string, age: number, height: number}
const data: Item[] = [
{name: "old and tall", age: 80, height: 80},
{name: "old and short", age: 80, height: 20},
{name: "young and tall", age: 10, height: 80},
{name: "young and short", age: 10, height: 20},
]
const colDefs: ColDef[] = [
{
headerName: "",
checkboxSelection: true,
headerCheckboxSelection: true,
headerCheckboxSelectionFilteredOnly: true,
width: 60,
sortable: false
},
{ field: "name"},
{ field: "age"},
{ field: "height"}
]
const criteria1 = (node: RowNode) => node.data.age > 50
const criteria2 = (node: RowNode) => node.data.height > 50
export const DevPage: FunctionComponent = () => {
const [isCriteria1, setIsCriteria1] = useState<boolean>(false)
return ( <Fragment>
<h2> {isCriteria1 ? "By Age" : "By Height"} </h2>
<Button onClick = { () => setIsCriteria1(!isCriteria1) }>
Switch criteria
</Button>
<div className="ag-theme-alpine" style={{height:"800px"}}>
<AgGridReact
rowSelection="multiple"
columnDefs = {colDefs}
rowData={data}
isRowSelectable = {isCriteria1 ? criteria1 : criteria2}
suppressRowClickSelection={true}
/>
</div>
</Fragment> )
}
答案 0 :(得分:1)
作为一种解决方法,您可以在RowNode
事件触发时强制所有onClick
重新评估可选属性。
const [rowData, setRowData] = React.useState<RowDataType[]>([]);
const criterial = React.useRef(true);
const isSelectable = (rowNode: RowNode) => {
const result = rowNode.data.age > 25;
const selectable = result === criterial.current;
return selectable;
};
const toggleCriteria = () => {
const updateSelectable = (rowNode: RowNode) => {
rowNode.setRowSelectable(isSelectable(rowNode));
};
criterial.current = !criterial.current;
gridApi.deselectAll();
gridApi.forEachNodeAfterFilterAndSort(updateSelectable);
};
return (
<>
<button onClick={toggleCriteria}>Toggle Criteria</button>
<AgGridReact
rowSelection="multiple"
suppressRowClickSelection
columnDefs={columnDefs}
onGridReady={onGridReady}
isRowSelectable={isSelectable}
rowData={rowData}
/>
</>
);