0

データベースからデータをロードするために使用している以下のコードを参照してください。初めてデータをロードする限り、コードは正常に動作します。各レコードと各ページは完全に読み込まれます。

Reload 関数を呼び出すと、問題が発生します。

  1. 重複する行をロードする場合があります (たとえば、ジェイソンが 20 行を返した場合、グリッドには 40 が表示されます)。
  2. グリッド内のレコードの最後のページを失います。

 jQuery("#list").jqGrid({
            url: "http://localhost/myapp/myfile.php",
            datatype: "json",                
            mtype:"POST",
            postData:{folder: 'INBOX' },
            jsonReader: 
            {
                root: "rows",
                page: "currpage",
                total: "totalpages",
                records: "totalrecords",
                id: "0",
                cell:"",
                repeatitems: false
            },
            colNames: ['Id','Message'],
            colModel: [ 
                        { name: 'messageid', index: 'messageid', hidden: true, search:false},
                        { name: 'message', index: 'message', search:false},
                      ],
            rowNum: 10,
            scroll: 1,
            prmNames:{npage:1},
            autowidth: true,
            height: 470,
            loadonce: true,
            viewrecords: true,
            altRows:true,                
            caption: "",
            pager: "#plist",
        });
        jQuery("#list").jqGrid('setFrozenColumns');

    function reload_list()
    {
        $("#list").setGridParam({datatype:'json'}).trigger('reloadGrid');
    }

以下の情報に注意してください

私が使用しているフレームワークはJqGridバージョンjquery.jqGrid-4.3.1 の Codeigniterです。

コードに含めたファイルは

  1. css/ui.jqgrid.css
  2. js/grid.locale-en.js
  3. js/jquery.jqGrid.src.js
  4. plugins/grid.posttext.js
  5. src/jqModal.js
  6. src/jqDnR.js

デモ: http://www.trimantra.com/demo/appointmentsystem/grid.php

この問題を解決する方法を教えてください。前もって感謝します。

4

2 に答える 2

1

コードから次の行を削除します。

jQuery("#list").jqGrid('setFrozenColumns');

このため、新しい行を作成しています。

于 2012-09-24T09:49:15.250 に答える
0

行の重複の問題を再現することはできませんが、アプリケーションには他にも多くの問題があることがわかりました。

あなたの主な問題は、3 つのグリッドすべてに同じ ID を持つデータをロードするためだと思います。結果として、ページにIDの重複があります。問題を解決する最も簡単な方法はidPrefix、jqGrid のオプションを使用することです。

以下に、私が見つけた最も重要な問題のリストを示します。

  • アプリケーションに誤って jQuery UI を含めました。imagesテーマのサブディレクトリが含まれていません。そのため、アプリケーションは のロード時に「HTTP/1.1 404 Not Found」エラーを受け取りますhttp://www.trimantra.com/demo/appointmentsystem/lib/jquery.jqGrid-4.3.1/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.pngimagesすべてをプロジェクトに含める必要があります。
  • idPrefixグリッドでオプションを使用せず、同じデータを 3 つのグリッドにロードします。結果として、3 つのグリッドすべて<tr>に同じ ID を持つ要素が含まれます。HTML は ID の重複を許可しません。この問題を解決するには、たとえばidPrefix: "a"、を 3 つのグリッドに使用できます。結果として、最初のグリッドと最後のグリッドで行が取得され、ページに ID の重複がなくなります。idPrefix: "b"idPrefix: "c"messageid: "45"id="a45"id="b45"id="c45"
  • と を組み合わせても意味がありませscroll: 1loadonce: true。何をする必要があるかを理解したら 、すべてのグリッドからscroll: 1andを削除するだけです。prmNames:{npage:1}オプションは、仮想スクロールに必要です。
  • gridview: true行数が多い場合、グリッドのパフォーマンスを何度も改善するオプションを追加する必要があります。
  • サーバーを生成するサーバー応答は、現在 jqGrid 要求に対応していません。リクエストには、、、、が含まれrows=10ます。サーバーは48 行のデータすべてを返しますが、データはソートされていません。いずれにしても、サーバー コードにデータの並べ替えを挿入する必要があります。page=1sidx=tonamesord=asc
  • 表示されているすべての列で使用frozen:trueします。設定に意味がありません。
  • 'messageid'列を表示する必要がない場合は、列定義を から削除colModelしてを使用できますjsonReader: {id: "messageid", repeatitems: false }。結果として、ページ上の場所が保存されます (非表示の列は引き続きページ上に配置されます)。
  • ロケールに依存しない形式ISO 8601で日付を転送することをお勧めします。さらに、使用できるformatter: 'data'形式で日付を表示するために使用する必要があります。主な利点は、使用時の列の正しい並べ替え順序です。05/16/2012 07:45 AMformatoptions: { newformat: "d/m/Y H:i A" }loadonce: true
  • colModel定義から末尾のコンマを削除する必要があります。組み合わせ},]は JavaScript のエラーです。このエラーは、最新の Web ブラウザーでは無視されます (ただし、IE6 などの古いブラウザーでは無視されます)。エラーのないコードを書くことをお勧めします。
于 2012-05-26T10:32:51.917 に答える