我们可以使用onCellDoubleClicked
事件来触发行数据上变量isFull
的切换.
const cellDoubleClicked = (params) => {
console.log(1)
const data = params.data;
data['showFull'] = !data['showFull'];
params.node.setData(data);
}
在格式化工具上,使用三元条件,我们可以切换完整/四舍五入的值,如下所示!
const customFormatter = (params) => params.data.showFull ? params.value : params && params.value && params.value.toFixed(2);
最后,我们可以添加一个onCellClicked
侦听器,将isFull
属性重置为False,使其返回到旧状态,只有当您单击网格中的另一个单元格时,它才起作用!
const onCellClicked = useCallback((event) => {
console.log(event);
setRowData(rowData.map(x => {
x.showFull = false;
return x;
}));
}, []);
完整代码
'use strict';
import 'ag-grid-community/styles/ag-grid.css';
import 'ag-grid-community/styles/ag-theme-quartz.css';
import { AgGridReact } from 'ag-grid-react';
import React, { StrictMode, useMemo, useState, useCallback } from 'react';
import { createRoot } from 'react-dom/client';
import './styles.css';
const customFormatter = (params) => params.data.showFull ? params.value : params && params.value && params.value.toFixed(2);
const cellDoubleClicked = (params) => {
console.log(1)
const data = params.data;
data['showFull'] = !data['showFull'];
params.node.setData(data);
}
const createRowData = () => {
var rowData = [];
for (var i = 0; i < 100; i++) {
rowData.push({
price: Math.random() * 100,
});
}
return rowData;
};
const GridExample = () => {
const containerStyle = useMemo(() => ({ width: '100%', height: '100%' }), []);
const gridStyle = useMemo(() => ({ height: '100%', width: '100%' }), []);
const [rowData, setRowData] = useState(createRowData());
const [columnDefs, setColumnDefs] = useState([
{ headerName: 'Price', field: 'price', valueFormatter: customFormatter, onCellDoubleClicked: cellDoubleClicked },
]);
const defaultColDef = useMemo(() => {
return {
flex: 1,
cellClass: 'number-cell',
};
}, []);
const onCellClicked = useCallback((event) => {
console.log(event);
setRowData(rowData.map(x => {
x.showFull = false;
return x;
}));
}, []);
return (
<div style={containerStyle}>
<div
style={gridStyle}
className={
"ag-theme-quartz"
}
>
<AgGridReact
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
onCellClicked={onCellClicked}
/>
</div>
</div>
);
};
const root = createRoot(document.getElementById('root'));
root.render(
<StrictMode>
<GridExample />
</StrictMode>
);
plunkr个