1

jqgrid を使用して、(大学の) コース評価で満たされたデータベースの内容を表示しています。約 20 ~ 25 列、3 万行で構成されます。

webtool (jqgrid) の目的は、データをフィルタリングし、選択した列/行を Excel や図にエクスポートできるようにすることです。これまでのところ、ExcelExportを機能させることができました(PHPExcelを使用して実際にxlsxファイルを作成していますが、実際には関連していません)が、サーバーに送信されたデータには、どの列が表示されるかについては何も含まれていません-それただし、フィルターが含まれているので、それで問題ありません。列チューザーとフィルターツールバーを使用して、選択したデータを表示しています。

基本的に、colModel を、excelexport に送信されたフィルターと共に送信したいと考えています (後で Google チャートにも送信します)。colModel を取得する次の方法を見つけました。

var colModel = $("#list").jqGrid('getGridParam','colModel');

これは、jqgrid ソースでの excelexport 関数の外観です。

    excelExport : function(o) {
        o = $.extend({
            exptype : "remote",
            url : null,
            oper: "oper",
            tag: "excel",
            exportOptions : {}
        }, o || {});
        return this.each(function(){
            if(!this.grid) { return;}
            var url;
            if(o.exptype === "remote") {
                var pdata = $.extend({},this.p.postData);
                pdata[o.oper] = o.tag;
                var params = jQuery.param(pdata);
                if(o.url.indexOf("?") !== -1) { url = o.url+"&"+params; }
                else { url = o.url+"?"+params; }
                window.location = url;
            }
        });

これを編集しようとしましたが、結果がありませんでした (この関数を編集することはできませんか?) ので、独自の ajax 呼び出しを行いますが、どこから始めればよいかわかりません。独自の呼び出しを作成するときに postData にアクセスするにはどうすればよいですか? それとももっと良い方法がありますか?

ありがとうございました!

4

1 に答える 1

2

最後に、他の誰かが同じ問題に遭遇した場合に備えて解決策を共有し、機能するようになりました。

まず第一に、この方法でファイルを生成するために ajax を使用することはできないため、これは適切な方法ではありません。

私がやったことは、ソースのものと非常によく似た関数を使用し、可視列をパラメータ「列」として追加することでした。

ボタンをページャーに追加します。

 $grid.jqGrid('navButtonAdd', '#pager',
                    {caption: '',
                        title: 'Export to Excel',
                        onClickButton: function(e) {

表示される列の配列を作成します。

                            var cols = [];
                            var mycolModel = $("#list").getGridParam("colModel");
                            $.each(mycolModel, function(i) {
                                if (!this.hidden) {
                                    cols.push(this.name);
                                }
                            });

とにかくjqgridが送信しようとしていたパラメータ(フィルター、検索、sidxなど)と一緒に、配列をパラメータに追加します。

                            var pdata = $grid.jqGrid('getGridParam', 'postData');
                            var colsJ = JSON.stringify(cols);
                            var params = jQuery.param(pdata);
                            params = params + "&columns=" + colsJ;

パラメータを Excelexporter に送信します。

                            var url = 'ExcelExport.php' + "?" + params;
                            window.location = url;
                        }
                    });
        });
于 2013-10-07T20:52:48.660 に答える