2011-07-30 9 views
6

私はjqGridベースのアプリケーションを持っていました。グリッドオプションではloadonce: truecolModelではsortable: true, sorttype: 'textを使用して、データグリッドでクライアント側のソートを可能にしています。しかし、データグリッドが再ソートされると、最後に選択された行は強調表示されなくなることがわかりました。私の質問は、どのように選択された行をデータの訴求を通して強調表示された状態に保つかです。jqGridでクライアント側のソート後に最後に選択した行を強調表示する方法は?

答えて

9

the small demo私はあなたのために行を選択しています。デモでは、selectionPreserverのコードを書き換え、reloadGridの使用時に追加のパラメータ:$("#list").trigger("reloadGrid", [{current:true}]);を使用しました。詳細はthe answerを参照してください。

デモはonSortColイベントハンドラの内部で現在の選択を保存し、loadCompleteの内側にそれを復元:あなたが使用法を参照してくださいどのように

onSortCol: function() { 
    saveSelection.call(this); 
}, 
loadComplete: function() { 
    restoreSelection.call(this); 
} 

は非常に簡単です、あなたはあなたのコードでそれを統合することができます。あなたの詳細な回答のため

var lastSelArrRow = [], 
    lastScrollLeft = 0, 
    lastSelRow = null, 
    saveSelection = function() { 
     var $grid = $(this); 
     lastSelRow = $grid.jqGrid('getGridParam', 'selrow'); 
     lastSelArrRow = $grid.jqGrid('getGridParam', 'selrow'); 
     lastSelArrRow = lastSelArrRow ? $.makeArray(lastSelArrRow) : null; 
     lastScrollLeft = this.grid.bDiv.scrollLeft; 
    }, 
    restoreSelection = function() { 
     var p = this.p, 
      $grid = $(this); 

     p.selrow = null; 
     p.selarrrow = []; 
     if (p.multiselect && lastSelArrRow && lastSelArrRow.length > 0) { 
      for (i = 0; i < lastSelArrRow.length; i++) { 
       if (lastSelArrRow[i] !== lastSelRow) { 
        $grid.jqGrid("setSelection", lastSelArrRow[i], false); 
       } 
      } 
      lastSelArrRow = []; 
     } 
     if (lastSelRow) { 
      $grid.jqGrid("setSelection", lastSelRow, false); 
      lastSelRow = null; 
     } 
     this.grid.bDiv.scrollLeft = lastScrollLeft; 
    }; 
+0

親愛なるオレグ、感謝:saveSelectionrestoreSelectionの実装は次のようです!それは素晴らしい!あなたのコメントによると、ソートがクライアント側で実行されていても、グリッドが再ロードされるという根本的な原因が判明しました。そのような選択はプログラム的に復元する必要があります。 –

+0

@ウィリアム・チェイ:ようこそ! – Oleg

関連する問題