0

JqG​​ridを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でLoadを呼び出して、DbSetにデータを入力してから、ローカルデータにバインドします。WPFの場合は、DbSet.Localにバインドします。WinFormsの場合、DbSet.Local.ToBindingList()にバインドします。

私が理解している限り、DbSet.LocalメンバーにあるObservableCollectionがあることを期待しています。しかし、私は投影されたクエリに取り組んでいるので、それを行うことはできません。

この問題の解決策は何ですか。

4

1 に答える 1

1

回答では、Excel へのエクスポートを実装する方法を示すデモを投稿しました (ここで使用される *.XLS に名前が変更された HTML フラグメントではなく、実際の *.XLSX ファイル)。

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」と誤って表示されます。

グリッドの中央にあるデータの小さな部分が間違って変換される大きなテーブルの場合は特に危険です。あるプロジェクトで、ソフトウェアに関する情報を表示しましたが、一部のソフトウェア バージョンが誤って Date タイプに変換されます。

このような問題やその他の密接な問題があるため、 Open XML SDK 2.5またはOpen XML SDK 2.0を使用してサーバー上に実際の Excel ファイルを作成します。この方法では、上記の問題はありません。したがって、古い回答で説明されているアプローチに従うことをお勧めします。

于 2012-06-29T14:19:57.033 に答える