3

サーバー側のデータ バインドされた jqGrid があります。ソートボタンがクリックされたときにローカルソートが必要です。

私はこれを行いました:ちょうど編集しました:完全なデータを取得してから、並べ替えてグリッドに挿入します。

編集済み

var asc = true;

$(document).ready(function () {

    $("span.s-ico").click(function () {

        var allData = jQuery("#myGrid").jqGrid('getRowData');
    if (asc == true) {
        allData.sort(function (a, b) {
            if (a.myID> b.myID) return -1;
            else return 1;
        });
        asc = false;
    }
    else {
        allData.sort(function (a, b) {
            if (a.myID> b.myID) return 1;
            else return -1;
        });
        asc = true;
    }

    var alt = $.extend(true, [], allData);

    //alt.shift().shift();
    $('#myGrid').jqGrid('setGridParam', { url: null, datatype: 'local' });
    $('#myGrid').jqGrid('setGridParam', { data: alt });
    $('#myGrid').trigger("reloadGrid");
    return false;;
      //alert("I'm clicked");
    });

});

次のように構成されたjqGridで:

$("#myGrid").jqGrid({
        url: URL,
        datatype: 'json',
        mtype: req,
        ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
        colNames: ['AnotherColumn', 'myID'],
        colModel: [
                    { name: 'AnotherColumn', index: 'AnotherColumn', width: 105, sortable: false, editable: true },
                    { name: 'myID', index: 'myID', sortable: true, width: 185, editable: true }
                ],
        rowNum: 100,
        rowList: [],      
        pgbuttons: false,
        pgtext: "Page {0} of {1}",
        pgtext: null,
        pager: '#myGridPager',
        sortname: 'myID',
        viewrecords: false,
        sortorder: 'asc',
        sortable: true
    });
4

1 に答える 1

3

まず、グリッド データをローカルで並べ替えまたは検索/フィルター処理する場合は、プロパティの値と同じindexすべての項目でプロパティの値を使用する必要があります。列定義からプロパティを削除することをお勧めします。現在使用しているcolModel nameindex

{ name: 'AnotherColumn', index: 'Id', ...}

これは間違っています。

他にも多くの重要な問題があります。

ローカルデータを並べ替えたい場合は、最初にローカル データを入力する必要があります。jqGrid はdata、内部_indexオプションをサポートしています。通常、入力オプションでローカル データを指定する必要がありますdata。jqGrid の場合、グリッドの構築中にローカルでデータを並べ替えてから、データの最初のページを表示します。使用するdatatype: 'json' 、グリッドの表示ページの塗りつぶし中にloadonce: true内部パラメーターが塗りつぶされます。data入力データには、1 ページとして複数を含めることができます。

オプションdatatype: 'json' なし で使用すると、noが入力されます。したがって、空に変更した後はグリッドのソースになり、メソッドを使用した並べ替えは、グリッドをリロードするメソッドの呼び出しに従います。と空の場合は 、空のグリッドになります。loadonce: truedatadatatype'local'datasortGridpopulatedatatype: 'local'data

トラストに伝えるために、私はあなたの正確な要件を理解していません. グリッドに表示できる合計日付があまりない場合 (たとえば、1000 行未満)、 オプションを使用して、 からすべてのデータloadonce: trueを返すことができます。データは最初にソートする必要があります。または、たとえばここで説明されているトリックを使用できます。非常に大きなデータ セットがある場合 (たとえば、10000 行のグレーター) 、データのサーバー側の並べ替えとページングを実装する必要があります。データの小さな部分 (1 ページ) の並べ替えは、グリッドを使用するユーザーの誤解につながる可能性があります。URL

いずれにせよ、グリッドgridview: trueにオプションを追加することをお勧めします。autoencode: true

于 2013-05-20T13:43:20.400 に答える