コンテンツのサイズに応じて可変の行の高さを提供したいと思います。Slickgridで可能ですか?
例を教えてください。
これは可能ですが、簡単ではなく、パフォーマンスが低下する可能性があります。SlickGrid の仕組みでは、次の 2 つの質問に迅速に答えることができる必要があります。
静的な行の高さを使用する場合、これらの質問に答えるのは簡単です。ただし、動的な行の高さでは、いくつかの追加のデータ構造を維持する必要があります。
Slick.Grid.js で変更した内容は大まかに次のとおりです。
これを実用的 (高性能) にするには、行の上部オフセットのキャッシュ (行サイズの合計のキャッシュ) も必要です。これにより、最初の質問の迅速な計算が可能になり、二分探索で 2 番目の質問に答えることができます。
それが役立つことを願っています。
@Stephen Robinson の回答 here の助けを借りて、これをプロジェクトに実装しました。
興味のある方は、
https://github.com/vihari/Seaview/blob/version3.0/SlickGrid-master/slick.grid.jsを確認してください。
options.enableWrap を true に設定すると、上記のファイルで有効にできます。
ありがとうございました。
これが質問の核心を満たしていないことはわかっていますが、現時点では最小限の労力で、現時点での私の要件を満たす簡単な解決策を決定しました。したがって、これは、他の人が同様に簡単な解決策を探している場合に備えてのものです.
値を変更すると行のサイズが変更される入力ボックスから始めました。ただし、スライダーを使用することに落ち着きました。実際のところ、グリッド内のデータが非常に少ないため (少量のデータと非常に少ない行であることが保証されています)、スライダーのスライドに合わせてグリッドのサイズを動的に変更します。これは非常に遅くなる可能性があるため、多くの人がこれはひどいアイデアだと言うでしょうが、繰り返しますが、私は非常に少量のデータを使用しています。
重要なのは、オプションで新しい rowHeight 値を設定してグリッドを再作成することです。
スライダーを処理し、グリッドを再作成するコードを追加します (または、すべてのスライド ティックで再描画したくない場合は、「スライド」関数にあるものを「停止」関数に移動することもできます)。
$j( "#resizeRowSlider" ).slider({
range:"min"
, min: 50
, max: 200
, value: 50
, create: function( even, ui ) {
$j("rowResizeValue").html( "50" );
}
, slide: function( event, ui ) {
$j( "rowResizeValue" ).html( ui.value );
options.rowHeight = ui.value;
// I do a manual resize; you could use autoHeight:true in grid options
resizeGrid();
grid = new Slick.Grid("#" + gridElemId, json, columns , options);
grid.setSelectionModel(new Slick.RowSelectionModel() );
refreshGrid(); // Handle invalidate, resizeCanvas
}
, stop: function( event, ui ) {
}
});
また、これは行単位ではありませんが、今のところ私のニーズに合っていることに注意してください。理想的ではありませんが、機能します。さらに、オーバーフローなしで最初にグリッドをレンダリングする必要がある場合は、問題のテキストを取得して を追加するたびに非表示の div を作成しdisplay:table-cell
、div の高さを取得して、その値を rowHeight のグリッド オプションに設定できます。次に、グリッドを作成 (または再作成) します。
単純明快ですが、これは SlickGrid ではサポートされておらず、今後もサポートされない可能性があります。ごめん。
github の JLynch7 による可変高さの実装もあります。
https://github.com/JLynch7/SlickGrid/tree/variableRowHeight
私が理解している限り、高さはユーザーによって設定され、行のセルの内容に基づいて自動的に計算されるわけではありません (example/example-variable-row-height-dataview.html のみを見ました)。
上記のオプションの要約として、それらのどれも公式ではなく、サポートされており、本番環境に対応していません。doby-grid オプション (よりサポートされています) でさえ、まだ本番環境に対応していないとリストされています。
以下の間にも違いがあることに注意してください。
驚くべきことに、上記のすべての SlickGrid バリアント (および他の多くの DataGrid ライブラリ) を使用すると、上記の 1 つまたは 2 つを取得できますが、3 つすべてを取得することはできません。
正式にサポートされ、本番環境に対応していることにあまり関心がない場合は、上記の 3 つの SlickGrid バリアントをテストして得た印象を以下に示します。
海の眺め
Jリンチ7
ドビーグリッド
最近、SlickGrid をフォークして、可変 (およびサイズ変更可能な) 行を含む一連の新機能を追加しました。ここで試すことができます: https://github.com/globexdesigns/doby-grid
この変数を外部で定義します....
var tableHeight = 0;
滑らかなグリッドを作成する前に、線の下を使用します。
// 各行に 30 ピクセル これはヘッダーをカバーします... テーブルに合わせてこの値を調整できます。
tableHeight = dataTable.length * 30;
if(tableHeight > ($(window).height() - 400)){
$("#myGrid").height($(window).height() - 400);
}else{
$("#myGrid").height(tableHeight);
}
ページが既に生成されているときにユーザーが画面を変更すると、以下は画面とデータの行数に基づいてテーブルのサイズを変更します。
$(window).resize(function() {
// For grid height
if(tableHeight > ($(window).height() - 400)){
$("#myGrid").height($(window).height() - 400);
}else{
$("#myGrid").height(tableHeight);
}
// For grid width
$("#myGrid").width("100%");
// Resize the grid dynamically.
gridName.resizeCanvas();
});
SlickGrid のフォークは、多くの点で実際に実行可能なオプションではないため、この投稿の多くの読者にとって、SlickGrid の代替案について議論することは価値があると思いました。
可変の行の高さを完全にサポートする「実行可能な代替手段」は次のとおりだと思います。各行は、コンテンツに合わせて自動的に適応する異なる行の高さを持つことができ、テキストを次の行に折り返すことができます。
私はこれをかなり詳しく調べましたが、残念ながら、SlickGrid に関連する実行可能な代替手段は見つかりませんでした。他の選択肢の中で、無料で商用利用できるdojox DataGridしか見つかりませんでしたが、これでカスタムエディターをどのように使用できるかは明確ではありません (ほとんどの商用エディターはこれを提供しています)。
商用利用には支払いが必要な実行可能な代替手段がかなりあります: dhtmlxGrid、jQuery EasyUI DataGrid、jQWidgets、Wijmo Grid ウィジェット、JideTable、および Sencha ExtJS Grids。これらのうち、個人的には dhtmlxGrid http://dhtmlx.com/docs/products/dhtmlxGrid/が最高だと思います。無料版は GPL、Pro 版は 199 ドルです。