Jquery 如何使jQgrid能够将数据导出到PDF/Excel

Jquery 如何使jQgrid能够将数据导出到PDF/Excel,jquery,jqgrid,export-to-excel,export-to-pdf,Jquery,Jqgrid,Export To Excel,Export To Pdf,我是jQuery/jQgrid编码方面的新手。我使用的jQgrid版本是4.4.4和jQuery 1.8.3。我想在jQgrid中启用导出到PDF/EXCEL功能。为此,我参考了以下链接-和。基于这些链接,我在jquery中开发了几行代码,如下所示: .jqGrid('navGrid', topPagerSelector, { edit: false, add: false, del: false, search: false, pdf: true}, {}, {}, {}, {}

我是jQuery/jQgrid编码方面的新手。我使用的jQgrid版本是4.4.4和jQuery 1.8.3。我想在jQgrid中启用导出到PDF/EXCEL功能。为此,我参考了以下链接-和。基于这些链接,我在jquery中开发了几行代码,如下所示:

   .jqGrid('navGrid', topPagerSelector, { edit: false, add: false, del: false, search: false, pdf: true}, {}, {}, {}, {}
   }).jqGrid('navButtonAdd',topPagerSelector,{
    id:'ExportToPDF',
    caption:'',
    title:'Export To Pdf',
    onClickButton : function(e)
    {
        try {
            $("#tbPOIL").jqGrid('excelExport', { tag: 'pdf', url: sRelativePath + '/rpt/poil.aspx' });
        } catch (e) {
            window.location = sRelativePath + '/rpt/poil.aspx&oper=pdf';
        }
    },
    buttonicon: 'ui-icon-print'
});
但是这个代码不能正常工作。我在谷歌上搜索了很多,但我没有得到有用的相关信息来完成我的任务。有人知道怎么做吗


更新:我没有使用付费版本的jqgrid。

要在onclick事件中调用的函数

function exportGrid(){
  mya = $("#" + table).getDataIDs(); // Get All IDs
var data = $("#" + table).getRowData(mya[0]); // Get First row to get the
// labels
var colNames = new Array();
var ii = 0;
for ( var i in data) {
    colNames[ii++] = i;
} // capture col names

var html = "<html><head>"
        + "<style script=&quot;css/text&quot;>"
        + "table.tableList_1 th {border:1px solid black; text-align:center; "
        + "vertical-align: middle; padding:5px;}"
        + "table.tableList_1 td {border:1px solid black; text-align: left; vertical-align: top; padding:5px;}"
        + "</style>"
        + "</head>"
        + "<body style=&quot;page:land;&quot;>";


for ( var k = 0; k < colNames.length; k++) {
    html = html + "<th>" + colNames[k] + "</th>";
}
html = html + "</tr>"; // Output header with end of line
for (i = 0; i < mya.length; i++) {
    html = html + "<tr>";
    data = $("#" + table).getRowData(mya[i]); // get each row
    for ( var j = 0; j < colNames.length; j++) {
     html = html + "<td>" + data[colNames[j]] + "</td>"; // output each Row as
                // tab delimited
    }
    html = html + "</tr>"; // output each row with end of line
}
html = html + "</table></body></html>"; // end of line at the end
alert(html);
html = html.replace(/'/g, '&apos;');
//  var form = "<form name='pdfexportform' action='generategrid' method='post'>";
//  form = form + "<input type='hidden' name='pdfBuffer' value='" + html + "'>";
//  form = form + "</form><script>document.pdfexportform.submit();</sc"
//      + "ript>";
//  OpenWindow = window.open('', '');
//  OpenWindow.document.write(form);
//  OpenWindow.document.close();
}
函数exportGrid(){
mya=$(“#”+表).getDataIDs();//获取所有ID
var data=$(“#”+table).getRowData(mya[0]);//获取第一行以获取
//标签
var colNames=新数组();
var ii=0;
用于(数据中的var i){
colNames[ii++]=i;
}//捕获列名称
var html=“”
+ ""
+“table.tableList_第1个{边框:1px纯黑色;文本对齐:居中;”
+“垂直对齐:中间;填充:5px;}”
+“table.tableList_1 td{边框:1px纯黑色;文本对齐:左侧;垂直对齐:顶部;填充:5px;}”
+ ""
+ ""
+ "";
for(var k=0;k
如果您使用的是PHP,请尝试。那你只需要打个电话

$dg->enable_export('PDF'); // for excel: $dg->enable_export('EXCEL'); 

退房。它生成渲染网格所需的jqGrid javascript。

这里有一个聪明的解决方案,可以将
jqGrid
数据保存为excel工作表:(您只需使用
GridID
和可选的
文件名
调用此函数)

var createExcelFromGrid=函数(gridID,文件名){
var grid=$(“#”+gridID);
var rowIDList=grid.getDataIDs();
var row=grid.getRowData(rowIDList[0]);
var colNames=[];
var i=0;
for(第行中的变量cName){
colNames[i++]=cName;//捕获列名
}
var html=“”;
对于(var j=0;j
if(exportexcel.Equals(excel))
{
GridView视图=新建GridView();
字符串conn=@“服务器=localhost;端口=3306;数据库=jtext;Uid=root;密码=techsoft”;
IFormatProvider culture=新系统。全球化。文化信息(“fr-fr”,true);
MySqlConnection con=新的MySqlConnection(conn);
con.Open();
MySqlCommand cmd=新的MySqlCommand(查询,con);
MySqlDataAdapter adp=新的MySqlDataAdapter(cmd);
数据集ds=新数据集();
自动进料(ds);
view.DataSource=ds;
view.DataBind();
con.Close();
HttpContext=HttpContext.Current;
context.Response.Write(Environment.NewLine);
context.Response.Write(Environment.NewLine);
context.Response.Write(Environment.NewLine);
DateTime ss=DateTime.Now;
字符串自定义=ss.ToString(“dd-MM-yyyy”);
字符串sss=DateTime.Now.ToString(“HH:mm:ss”,System.Globalization.DateTimeFormatInfo.InvariantInfo);
字符串aaa=“生成日期和时间:“+自定义+”+sss;
context.Response.Write(aaa);
context.Response.Write(Environment.NewLine);
foreach(ds.Tables[0].Columns中的DataColumn列)
{
context.Response.Write(column.ColumnName+“,”);
}
context.Response.Write(Environment.NewLine);
foreach(ds.Tables[0].行中的DataRow行)
{
对于(int i=0;i

strong text

您在
excelExport
功能中尝试了什么?实际上,根据链接,如果您参考链接页面的源代码,我认为通过设置
pdf:true
并提供
excelExport
功能,它将导出为pdf格式。但它不会。我在网上搜索,在人们告诉的一些链接中我们不能将数据导出为PDF格式,而应该使用付费版本的jQgrid,否则我们需要查找服务器端(PHP)解决方案。但不幸的是,我不懂PHP。不,您需要编写
excelExport
函数将网格内容导出到服务器。在那里您可以以PDF格式打印。您不需要使用付费版本导出到PDF。这是您的jQgrid ID表。好的,先生,但您没有注释
+“>;
+“script>”
这一行。我应该注释它还是代码需要注释?您将在
警报(html)
中找到您的html内容。这是javascript端的结尾。您需要取消注释(最后所有注释行)在alert message中验证您的内容后。让我们来看一下,我使用了类似的方法,最终得到了一个xls文件…但由于这基本上构建了一个HTML表,我在打开它时会收到一个警告,然后如果我试图保存它,我会将它保存为网页。其他人也会发生同样的情况吗?有解决方案吗?谢谢您的分享代码,是的,它有效
var createExcelFromGrid = function(gridID,filename) {
    var grid = $('#' + gridID);
    var rowIDList = grid.getDataIDs();
    var row = grid.getRowData(rowIDList[0]); 
    var colNames = [];
    var i = 0;
    for(var cName in row) {
        colNames[i++] = cName; // Capture Column Names
    }
    var html = "";
    for(var j=0;j<rowIDList.length;j++) {
        row = grid.getRowData(rowIDList[j]); // Get Each Row
        for(var i = 0 ; i<colNames.length ; i++ ) {
            html += row[colNames[i]] + ';'; // Create a CSV delimited with ;
        }
        html += '\n';
    }
    html += '\n';

    var a         = document.createElement('a');
    a.id = 'ExcelDL';
    a.href        = 'data:application/vnd.ms-excel,' + html;
    a.download    = filename ? filename + ".xls" : 'DataList.xls';
    document.body.appendChild(a);
    a.click(); // Downloads the excel document
    document.getElementById('ExcelDL').remove();
}
    if (exportexcel.Equals(excel) )
   {
        GridView view = new GridView();
        string conn = @"Server=localhost;port=3306;Database=jtext;Uid=root;Password=techsoft";
        IFormatProvider culture = new System.Globalization.CultureInfo("fr-Fr", true);
        MySqlConnection con = new MySqlConnection(conn);
        con.Open();
        MySqlCommand cmd = new MySqlCommand(query, con);
        MySqlDataAdapter adp = new MySqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        adp.Fill(ds);
        view.DataSource = ds;
        view.DataBind();
        con.Close();
        HttpContext Context = HttpContext.Current;
        context.Response.Write(Environment.NewLine);
        context.Response.Write(Environment.NewLine);
        context.Response.Write(Environment.NewLine);
        DateTime ss = DateTime.Now;
        string custom = ss.ToString("dd-MM-yyyy");
        string sss = DateTime.Now.ToString("HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo);
        string aaa = "Generated Date and Time : " + custom + "  " + sss;
        context.Response.Write(aaa);
        context.Response.Write(Environment.NewLine);
        foreach (DataColumn column in ds.Tables[0].Columns)
        {
            context.Response.Write(column.ColumnName + " ,");
        }
        context.Response.Write(Environment.NewLine);
        foreach (DataRow row in ds.Tables[0].Rows)
        {
            for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
            {
                context.Response.Write(row[i].ToString().Replace(" ", string.Empty).Replace(",", " ") + " ,");
             }
            context.Response.Write(Environment.NewLine);
        }
        string attachment = "attachment; filename= " + rolefullname + ".xls";
        context.Response.ContentType = "application/csv";
        context.Response.AppendHeader("Content-Disposition", attachment);
         }
       }