2

レポートを追加する必要があるたびに新しいバージョンのプログラムを発行するのではなく、その場でプログラムにレポートを追加できるように、汎用レポート システムを作成しようとしています。
現在、部分的に機能しています。
カスタム レポートの SQL は、レポート名と共にテーブルに保存されます。レポート名は、ユーザーがクリックするボタンに使用されます。ユーザーがボタンをクリックすると、SQL を実行してグリッドビューにバインドする必要があるため、可能な限り一般的です。

しかし、これは問題が発生する場所のようです。SQL を取得して実行することは問題ありませんが、それをグリッドビューにバインドすることは不可能のようです。System.Object の値を持つ 1 行を表示する、Column という名前の列を 1 つだけ取得します。

問題は、複数のテーブルからデータを返しているためだと思います。

SELECT c.CertificateName, e.EntityName, 
       ce.CertificateDate, ce.CertificateExpiry, ce.CertificateNumber 
FROM FCERTSTest.dbo.CertificateEntries ce 
INNER JOIN FCERTSTest.dbo.Certificates c 
ON c.CertificateID = ce.Certificate_ID 
INNER JOIN FCERTSTest.dbo.Entities e 
ON e.EntityID = ce.Entity_ID 
WHERE FirstNotificationSent = '1'

私は現在使用しています

using (DBContainer db = new DBContainer())
{
    grid.DataSource = db.Database.SqlQuery<dynamic>(SQLCommand).ToList();
}

と置き換えてみましdynamicobjectが、同じ問題が発生します...最善の解決策は、カスタムクラスをdynamic作成してそのカスタムクラスに置き換えることであることを理解していますが、別のレポートではそうでない可能性があるため、汎用であることの利点を失います同じ結果を返すと、新しいカスタム クラスが必要になります...

4

1 に答える 1

5

とを使用SqlDataAdapterDataSetます。EF は、結果セットに特別な型がない「動的クエリ」では機能しません。

于 2013-02-07T08:54:05.287 に答える