Ag-gridのバージョンを7.2.0からv14.2.0にアップグレードしました。 sizeColumnsToFit()
apiをonGridReady
またはonGridSizeChanged
イベントで使用すると、機能しますが、グリッド幅の誤った計算が原因で、不要な水平スクロールが維持されます。
この問題(?)は、ag-gridの公式の例でも確認できます。
https://www.ag-grid.com/javascript-grid-responsiveness/#example-example1
以前のバージョンでは、これは水平スクロールなしで完全に正常に機能します。
$scope.gridOptions.api.sizeColumnsToFit()
を手動で呼び出すと、水平スクロールが削除されます。
これが私のgridOptionsです:
$scope.ag_grid_options = {
headerHeight: 50,
rowHeight: 50,
//rowModelType: 'virtual',
rowModelType: 'infinite',
rowBuffer: 0,
cacheOverflowSize: 1,
infiniteInitialRowCount: 1,
cacheBlockSize: 50,
paginationPageSize: 50,
//virtualPaging: true,
enableServerSideSorting: true,
enableSorting: false,
enableColResize: true,
angularCompileRows: true,
onGridSizeChanged: function (param) {
$scope.ag_grid_options.api.doLayout();
$scope.ag_grid_options.api.sizeColumnsToFit();
},
columnDefs: grid_column_definitions
};
私はプロパティsuppressHorizontalScroll = trueを使用できることを知っています。しかし、ユーザーが手動で列のサイズを変更するときにスクロールが表示されないため、これを使用したくありません。
これはバグではなく、その機能です。すべての列の合計幅カウントがラッパーより大きい場合、スクロールバーが表示されます。 headerFieldsのminWidth
/maxWidth
プロパティを変更する必要がありますが、問題ありません。
var columnDefs = [
{headerName: 'Athlete', field: 'athlete', minWidth: 150},
{headerName: 'Age', field: 'age', minWidth: 50},
{headerName: 'Country', field: 'country', minWidth: 120},
{headerName: 'Year', field: 'year', minWidth: 90},
{headerName: 'Date', field: 'date', minWidth: 110}
];
同僚からちょうど私に提示された別の可能な解決策:
列の定義内で、クライアントの幅を計算し、それを列の数で割ることによって、各列の幅を設定できます。
width: (document.documentElement.clientWidth - 40) / (this.numColumns)
この場合、40はグリッドの両側のパディングの合計です(左20 +右20)。