0

我正在尝试将 JqGrid 导出到 excel,因此我按照此说明进行操作,如下所示使用它。

        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。但我正在处理预计查询,所以我不能这样做。

这个问题的解决方案是什么。

4

1 回答 1

1

答案中,我发布了演示如何实现导出到 Excel(真正的 *.XLSX 文件,而不是重命名为 *.XLS 的 HTML 片段,此处使用)。

jqSuite中用于导出到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 文件。顺便说一句,没有上述问题。因此,我建议您遵循我的旧答案中描述的方法。

于 2012-06-29T14:19:57.033 回答