如何根据行数据使ag-grid的列宽响应?
How to make the column width of ag-grid responsive based on row data?
农业网格中的列:
columnsDefs = [
{
headerName: 'Name',
field: 'name'
},
{
headerName: 'Age',
field: 'age'
},
{
headerName: 'Description',
field: 'description'
}
];
描述中的字符长度可能会有所不同。例如,某些行可能只有 10 个字符,而某些行可能有 50 个字符。
如果我设置列宽,如果描述的字符长度更长,那么一些字符将不会显示。
api.sizeColumnsToFit() 将缩放列以适应屏幕的可用宽度。
我想实现列 'Description' 宽度以根据其行数据进行响应。
您可以使用 columnApi
方法:autoSizeColumns
autoSizeColumn(colKey) Auto-sizes a column based on its contents.
要将所有列的大小调整为内容宽度,请使用:
columnApi.autoSizeAllColumns()
。但是,在 firstDataRendered()
事件上调用此方法。如果你有很多列,你也可以设置 suppressColumnVirtualisation=true
。
解释:
columnApi.autoSizeAllColumns()
方法调整列的大小以换行每列的内容宽度。但是,为了让网格知道内容的宽度是多少,它首先必须渲染数据。因此,应该在 firstDataRendered()
事件上调用此方法。如果列数更多,则由于 ag-grid 中的延迟加载,水平滚动条后面的列不会立即呈现。因此,autoSizeAllColumns()
无法调整这些列的大小。为此,需要使用网格的 suppressColumnVirtualisation=true
属性 禁用延迟加载。
如果您要参加此讨论,希望根据浏览器的当前宽度自适应地增加或减少 table 的宽度,请按以下方式进行反应:
let width = 100
const onFirstDataRendered = (params) => {
params.api.sizeColumnsToFit();
};
const onGridSizeChanged = (params) => {
let columnCount = params.columnApi.columnModel.gridColumns.length
width = params.clientWidth / columnCount
params.api.sizeColumnsToFit();
};
return (
<div style={{ width: '100%', height: '100%' }}>
<div id="grid-wrapper" style={{ width: '100%', height: '263px' }}>
<div
id="myGrid"
style={{
height: '100%',
width: '100%',
}}
className="ag-theme-alpine-dark"
>
<AgGridReact
defaultColDef={{ resizable: true }}
onFirstDataRendered={onFirstDataRendered}
onGridSizeChanged={onGridSizeChanged}
rowData={rowData}
>
<AgGridColumn field="data" width={width}></AgGridColumn>
<AgGridColumn field={columnData[1].field} width={width}></AgGridColumn>
<AgGridColumn field={columnData[2].field} width={width}></AgGridColumn>
</AgGridReact>
</div>
</div>
</div>
);
};
农业网格中的列:
columnsDefs = [
{
headerName: 'Name',
field: 'name'
},
{
headerName: 'Age',
field: 'age'
},
{
headerName: 'Description',
field: 'description'
}
];
描述中的字符长度可能会有所不同。例如,某些行可能只有 10 个字符,而某些行可能有 50 个字符。 如果我设置列宽,如果描述的字符长度更长,那么一些字符将不会显示。
api.sizeColumnsToFit() 将缩放列以适应屏幕的可用宽度。 我想实现列 'Description' 宽度以根据其行数据进行响应。
您可以使用 columnApi
方法:autoSizeColumns
autoSizeColumn(colKey) Auto-sizes a column based on its contents.
要将所有列的大小调整为内容宽度,请使用:
columnApi.autoSizeAllColumns()
。但是,在 firstDataRendered()
事件上调用此方法。如果你有很多列,你也可以设置 suppressColumnVirtualisation=true
。
解释:
columnApi.autoSizeAllColumns()
方法调整列的大小以换行每列的内容宽度。但是,为了让网格知道内容的宽度是多少,它首先必须渲染数据。因此,应该在 firstDataRendered()
事件上调用此方法。如果列数更多,则由于 ag-grid 中的延迟加载,水平滚动条后面的列不会立即呈现。因此,autoSizeAllColumns()
无法调整这些列的大小。为此,需要使用网格的 suppressColumnVirtualisation=true
属性 禁用延迟加载。
如果您要参加此讨论,希望根据浏览器的当前宽度自适应地增加或减少 table 的宽度,请按以下方式进行反应:
let width = 100
const onFirstDataRendered = (params) => {
params.api.sizeColumnsToFit();
};
const onGridSizeChanged = (params) => {
let columnCount = params.columnApi.columnModel.gridColumns.length
width = params.clientWidth / columnCount
params.api.sizeColumnsToFit();
};
return (
<div style={{ width: '100%', height: '100%' }}>
<div id="grid-wrapper" style={{ width: '100%', height: '263px' }}>
<div
id="myGrid"
style={{
height: '100%',
width: '100%',
}}
className="ag-theme-alpine-dark"
>
<AgGridReact
defaultColDef={{ resizable: true }}
onFirstDataRendered={onFirstDataRendered}
onGridSizeChanged={onGridSizeChanged}
rowData={rowData}
>
<AgGridColumn field="data" width={width}></AgGridColumn>
<AgGridColumn field={columnData[1].field} width={width}></AgGridColumn>
<AgGridColumn field={columnData[2].field} width={width}></AgGridColumn>
</AgGridReact>
</div>
</div>
</div>
);
};