导出到excel文件时出现JqGrid DataBinding异常

时间:2012-06-29 13:30:22

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

我正在尝试将JqGrid导出为ex​​cel,因此我按照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。但我正在研究预测查询,所以我不能这样做。

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

1 个答案:

答案 0 :(得分:1)

the answer中,我发布了the demo,其中显示了如何实现导出到Excel(真正的* .XLSX文件,而不是将HTML片段重命名为* .XLS使用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:

enter image description here

“TomsSpezialitäten”这个名称将错误地显示为“TomsSpezialitäten”。

在大型表格的情况下,网格中间的一些小部分数据将被错误转换,这可能会特别危险。在一个项目中,我显示了有关软件的信息,某些软件版本将被错误地转换为日期类型。

由于存在此类和其他严重问题,我使用Open XML SDK 2.5Open XML SDK 2.0在服务器上创建了真实的Excel文件。一方面没有上述问题。因此,我建议您按照my old answer中描述的方法进行操作。