2011-07-01 53 views
9

ドラッグ&ドロップ列の並べ替えは素晴らしい機能ですが、ユーザーが特定の(データ以外の)列を移動させないようにするにはどうすればよいですか?特定のSlickGrid列の並べ替えを防止する

たとえば、私はマルチ選択グリッドにチェックボックスセレクタを使用していますが、この列は常に左にロックする必要がありますが、他の列は自由に並べ替えることができます。

答えて

2

jQuery UIのソート可能なデモを見て、slick.grid.jsのsetupColumnReorder関数を変更して特定の項目を除外しました。チェックボックス列を除外することで、その列の前に他の列をドラッグしても並べ替えができなくなりました。

function setupColumnReorder() { 
var checkBoxColumn = $headers.children([0]).attr('id'); 
$headers.sortable({ 
items: "div:not('.slick-resizable-handle','#"+checkBoxColumn+"')", 
... 

私のチェックボックスの列は常に最初であるため、私はちょうどそのようにIDを取得します。ハックのビットが、それは働いた。

2

私はこの試みた:

function setupColumnReorder() { 
var checkBoxColumn = $headers.children([0]).attr('id'); 
$headers.sortable({ 
items: "div:not('.slick-resizable-handle','#"+checkBoxColumn+"')", 
... 

をしかし、その前に他の列をドラッグするとき、私は問題を抱えていました。それから私はこれを試みた:

grid.onColumnsReordered.subscribe(function (e, args) { 
    if (myGridColumns[0].id != grid.getColumns()[0].id) 
    { 
     grid.setColumns(myGridColumns); 
    } 
    else 
    { 
     myGridColumns= grid.getColumns(); 
    } 
}); 

それはちょうど良かった。

+0

実際の列の並べ替えを停止するのは良いですが、ユーザーが列をドラッグして列を並べ替えることができるという誤った感覚を与えてしまうという問題があります。私は、Xから多くの列を「注文可能」ではないとマークするフラグ/オプションがないことに少し驚いています。私は彼らが各列にサイズ変更可能なオプションを持っているという意味ですか?おそらく理由があるかもしれませんが、私はそれを見ていません... – Marko

+0

この問題は2つのテーブルを作ることで解決できます。左のテーブルでは、固定列を配置し、特定のフィールドにバインドします。そして右の表では、残りの列を配置します。それは完璧な解決策ではありませんが、意図したとおりに動作します。しかし、データを更新するときは注意が必要です。 – Zarko

関連する問題