5

私は約8日間(またはそれ以上)jqgridと戦っています。小さな問題を除いてすべてを行いました。私は大きなデータベースを持っており、それを部分的に表示しようとしています。つまり、、、、、またはユーザーがページ番号を入力するたびに、SQL クエリが実行されるということですnext。私はそれを管理し、すべてが正しいですが、現在、グリッドは正しい最後のページを表示していません. つまり、42 ページある場合でも 1/1 を表示しているということです。prevlastfirst

ページ番号を入力すると、グリッドが更新され、正しい結果が表示されますが、ページャーは 2 of 1、5 of 1 などと言っています。

私が使用したものは次のとおりです。

jQuery("#list").jqGrid({ 
        datatype: "jsonstring",
        datastr: JSON.stringify(gridDtls),
        jsonReader:{
          root: "rows",
          page: "page",
          total: "total",
          records: "records",
          repeatitems: false,
          id: "0"
        },

ボタンがクリックされるたびにクエリを実行するために使用しているコードは次のとおりです(ボタンが非アクティブであるため、以下のコードはEnterキーが押された場合にのみ機能することに注意してください):

onPaging: function(pgButton){ 
            var status = returnUserStatus();
            var page1 = $(this).jqGrid("getGridParam", "page");
            var totalPages = $(this).getGridParam('lastpage');

            if(pgButton=="next_pager"){ 


            } 
            if(pgButton=="prev_pager"){ 


            } 
            if(pgButton=="last_pager"){ 

            }
            if(pgButton=="first_pager"){ 

            }else if((pgButton !="first_pager") && (pgButton !="last_pager") && (pgButton !="prev_pager") && (pgButton !="next_pager"))     

        },

私にはすべてが正しいように思えます。jqgrid が正しいページを返さない理由 私を助けてください!!!

4

2 に答える 2

5

問題の原因は、サーバー側のページングdatatype: "jsonstring"で使用していることだと思います。その代わりに、を使用する必要があります。datatype: "json"

理解のために:タイプdatatype: "jsonstring"は。とほとんど同じdatatype: "local"です。最も重要な違いは、jqGridがjsonReaderの場合に使用されるlocalReaderdatatype: "jsonstring"の代わりにの場合に使用することです。ページ数はjqGridによって計算され、サーバー応答の値とサーバー応答からの値は無視されます。datatype: "local"totalrecords

jqGridは、ほとんどすべてのAjaxリクエストをサーバーに送信し、ほとんどすべてのレスポンスを読み取るための多くのカスタマイズオプションを提供します。対応するオプションを使用するだけです。サーバーインターフェイスに関する詳細を投稿していないため、ここに詳細を書き込むことはできません。

prmNamesオプション、ajaxGridOptionsおよびコールバックserializeGridDataとを調べることをお勧めしますloadBeforeSend。このオプションを使用すると、サーバーへのリクエストをカスタマイズできます。別のオプションjsonReaderjsonmapコールバックbeforeProcessingにより、サーバーの応答を読み取ることができます。

更新デモでは、jqGridのページング時にdatatype: "json"Ajaxリクエストを自動的に送信する方法を示しています。idグリッドの選択はさまざまです。あなたの場合、それはlogin列のようです。したがって、コードは次のようになります

$("#userslist").jqGrid({
    url: "admin",
    postData: {
        WrJOB: "listUsers",
        companyId: function () { return $("#companyId").val(); },
        userStatus: function () { return returnUserStatus(); }
    },
    jsonReader: {
        root: "gridDtls.rows",
        page: "gridDtls.page",
        total: "gridDtls.total",
        records: "gridDtls.records",
        repeatitems: false
    },
    prmNames: {page: "pageNum"},
    colModel: [
        {name: 'login', key: true, ...}
    ...
});

URLへのリクエストには、パラメータが自動的"admin"に含まれます。pageNumパラメータの値は"rows"20になります。これはページのサイズです。ユーザーがポケットベルで別の値を選択すると(を参照rowList: [20, 40, 60])、現在の値がサーバーに送信されます。このオプションは、prmNamesデフォルトパラメータの名前をに変更し"page"ます"pageNum"。同様に、jqGridをサーバーに送信する他のパラメーターの名前を変更できます。値として使用nullすると、サーバーへのパラメーターの送信が妨げられます。たとえば、

prmNames: {page: "pageNum", nd: null, search: null, sort: null, order: null}

使用しないパラメータの送信を排除します。

于 2013-01-16T08:52:26.083 に答える
1

これまで jqgrid を使用したことはありませんが、wikiで次の行を見つけました。

jsonstring を使用してデータを取得すると、データが取得された後、データ型オプションが自動的にローカルに設定されます。つまり、(現在) ページングは​​機能しません。

于 2013-01-16T08:50:19.433 に答える