レポートを追加する必要があるたびに新しいバージョンのプログラムを発行するのではなく、その場でプログラムにレポートを追加できるように、汎用レポート システムを作成しようとしています。
現在、部分的に機能しています。
カスタム レポートの 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();
}
と置き換えてみましdynamic
たobject
が、同じ問題が発生します...最善の解決策は、カスタムクラスをdynamic
作成してそのカスタムクラスに置き換えることであることを理解していますが、別のレポートではそうでない可能性があるため、汎用であることの利点を失います同じ結果を返すと、新しいカスタム クラスが必要になります...