JqG​​rid:选择要使用ExcelExport导出的列?

时间:2013-10-02 06:54:18

标签: jquery excel jqgrid

我正在使用jqgrid来显示充满(大学)课程评估的数据库的内容。它由大约20-25列和30k行组成。

webtool(jqgrid)的目的是能够过滤数据并将选定的列/行导出到Excel和图表。到目前为止,我已经设法使ExcelExport工作(我使用PHPExcel实际创建xlsx文件但不是真正相关),但是发送到服务器的数据不包括任何关于哪些列可见的内容 - 它确实包括过滤器,所以这一切都很好。我正在使用列选择器和filtertoolbar来显示所选数据。

基本上我想发送colModel以及发送到excelexport的过滤器(以及稍后的谷歌图表)。我找到了获取colModel的方法:

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

这是excelexport函数在jqgrid源中的外观:

    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-call但我真的不知道从哪里开始。在编写自己的电话时如何访问postData?或者有更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

最后让它工作,共享解决方案以防其他人遇到同样的问题。

首先 - ajax不能用于以这种方式生成文件,所以这不是可行的方法。

我最终做的是使用一个非常类似于源代码的函数,并将可见列添加为参数“columns”。

向寻呼机添加一个按钮:

 $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;

将params发送到您的excelexporter:

                            var url = 'ExcelExport.php' + "?" + params;
                            window.location = url;
                        }
                    });
        });