【问题标题】:JqGrid DataBinding exception while exporting to excel file导出到excel文件时出现JqGrid DataBinding异常
【发布时间】:2012-06-29 13:30:22
【问题描述】:

我正在尝试将 JqGrid 导出到 excel,所以我关注 this instruction 并像下面这样使用它。

        var grid = new JqGridModelParticipiant().JqGridParticipiant;

        var query = db.ReservationSet.Select(r => new
        {
            r.Id,
            Name = r.Doctor.Name,
            Identity = r.Doctor.Identity,
            Title = r.Doctor.Title.Name,
            Total = r.TotalTL,
            Organization = r.Organization.Name
        });

        grid.ExportToExcel(query,"file.xls");

我在“grid.ExportToExcel(query,"file.xls");”的行上得到了以下异常

数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)是 不支持。而是用数据填充 DbSet,例如通过 在 DbSet 上调用 Load,然后绑定到本地数据。对于 WPF 绑定 到 DbSet.Local。对于 WinForms 绑定到 DbSet.Local.ToBindingList()。

据我了解,它希望在 DbSet.Local 成员上有 ObservableCollection。但我正在处理预计查询,所以我不能这样做。

这个问题有什么解决办法。

【问题讨论】:

  • 如果您使用基于免费开源 jqGrid 的 jqSuite 等商业产品,您应该使用另一个标签,例如 jqgrid-asp.net,而不是 jqgrid。在the answer,我发布了the demo,它展示了如何实现导出到Excel(真正的*.XLSX 文件而不是重命名为*.XLS 的HTML 片段使用here)。

标签: asp.net-mvc jqgrid jqgrid-asp.net entity-framework-4.3


【解决方案1】:

the answer 中,我发布了the demo,它展示了如何实现导出到Excel(使用真正的*.XLSX 文件而不是重命名为*.XLS 的HTML 片段here)。

在jqSuite(the demo)中用于导出到Excel的方法生成HTML片段

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: application/excel; charset=utf-8
Server: Microsoft-IIS/7.0
X-AspNetMvc-Version: 2.0
content-disposition: attachment; filename=grid.xls
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Fri, 29 Jun 2012 14:24:54 GMT
Connection: close

<table cellspacing="0" rules="all" border="1" id="_exportGrid" style="border-collapse:collapse;">
    <tr>
        <td>OrderID</td><td>CustomerID</td><td>OrderDate</td><td>Freight</td><td>ShipName</td>
    </tr><tr>
        <td>10248</td><td>VINET</td><td>1996/07/04</td><td>32.3800</td><td>Vins et alcools Chevalier</td>
    </tr><tr>
        <td>10249</td><td>TOMSP</td><td>1996/07/05</td><td>11.6100</td><td>Toms Spezialitäten</td>
    </tr><tr>
        <td>10250</td><td>HANAR</td><td>1996/07/08</td><td>65.8300</td><td>Hanari Carnes</td>
    </tr><tr>
    ...
</table>

而不是创建真正的 Excel 文件。这种方式非常不安全,因为在打开时将始终使用“标准”类型的数据。例如,如果您要导出数据,例如

<td>10249</td><td>TOMSP</td><td>1996/07/05</td><td>11.02.12</td><td>Toms Spezialitäten</td>

如果默认使用德语语言环境,文本“11.02.12”将自动转换为日期 11.02.2012:

名称“Toms Spezialitäten”将错误地显示为“Toms Spezialitäten”。

在大表的情况下尤其危险,其中网格中间的一小部分数据将被错误转换。在一个项目中,我显示了有关 Software 的信息,并且某些软件版本会错误地转换为 Date 类型。

由于这些问题和其他问题,我使用Open XML SDK 2.5Open XML SDK 2.0 在服务器上创建了真正的Excel 文件。顺便说一句,没有上述问题。所以我建议你遵循my old answer中描述的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 2013-04-11
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多