Slickgridで、最も幅の広いコンテンツまたはヘッダーテキスト(どちらか広い方)に基づいて列のサイズを自動調整します。より簡単に言えば、列のサイズ変更に関して、通常のHTMLテーブルのデフォルトの動作をシミュレートしたいと思います。スリックグリッドでそれを行うにはどうすればよいですか?
オプションを作成するときは、forceFitColumns: true
を使用できます
var options = {
enableCellNavigation: true,
forceFitColumns: true
};
これにより、列がグリッドdivの幅全体に表示されます。
OPは、コンテンツに合わせて拡大する列を探しています。 grid.autosizeColumns()
は、親コンテナーに合わせてセルを拡大しますが、これは同じではありません。
私はこの機能を追加しましたが、ご想像通りのマニュアルです。表示されたセルをループしてそれぞれを測定し、最も広いセルを保存し、その幅を使用して列の幅を設定します。 SlickGridを使用すると、ビューポートのセルに適切にアクセスできるため、うまく機能します。
測定アルゴリズムはあなたの大きな決断です。 @jayが示唆するように、コンテンツを画面から外して測定することができます。これは機能しますが、挿入するには再描画が必要であり、削除すると再描画が必要になるため、最も遅い方法です。最適化する方法があるかもしれません。私が行った解決策は、アルファベットのすべての文字の幅と、遭遇する他の活版印刷文字を測定し、それらを合計して幅を生成することです。はい、これは不合理に聞こえます。これには多くの制約があります。フォントサイズは同じである必要があり、画像をサポートしていない、改行がないなどです。ただし、制約に耐えられる場合は、_<5ms
_で巨大なグリッドビューポートのサイズを計算できます。これは、文字の幅が1回しか測定されないためです。
列のサイズを取得したら、grid.setColumns()
を使用してそれらを列に割り当てます。
Slickgridは、データに基づく列の自動サイズをサポートしません。変更するには、プラグインを作成するか、slickgridコアをフォークする必要があります。
これが、slickgridの自動サイズを処理するプラグインを作成したリンクです https://github.com/naresh-n/slickgrid-column-data-autosize
これはグリッドが描画された後に追加したもので、正常に機能します。
$(window).resize(function() {
var cols = grid.getColumns();
grid.setColumns(cols);
})
グリッドオブジェクトのautosizeColumns()
メソッドを呼び出すことができるはずです。
grid.autosizeColumns();
init
関数で、Nareshの https://github.com/naresh-n/slickgrid-column-data-autosize をこのように簡単に調整します。
$container.ready(resizeAllColumns);
をinit関数に追加します。これにより、初期ロード時に列が自動的にサイズ変更されます