2

LocalReportオブジェクトを処理して(この部分を完成させて)、それReportViewerを別のフォームのコントロールに表示する方法はありますか? アイデアは、ReportViewer なしで印刷することです (既に行われています) が、ユーザーが印刷しようとしているものをプレビューすることもできます。

Visual Basic .NET SDK 3.5 と Visual Studio 2008 を使用しています。必要に応じて 2010 も使用できます。

私はこのようなことをしようとしました:

ReportViewer1.LocalReport = myLocalReport 

LocalReportしかし、プロパティ onReportViewerは読み取り専用であるため、運が悪い...

これに関するヒントはありますか?前もって感謝します。

(メソッドを使用してこれを実行することを知っていReportViewer1.LocalReportます。必要なのは、単一のコードを作成し、それをプリンターに直接またはプレビューフォームにバインドすることだけです)

4

2 に答える 2

0

LocalReport は読み取り専用ですが、ReportPath と ReportEmbeddedResource は設定可能です

このようなことを試すか、レポートが埋め込まれていない場合は、LocalReport の ReportPath プロパティを設定してみてください

reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("GravatomsReportRegister", GravatomsFullInfoByIdBindingSource));
            reportViewer1.LocalReport.ReportEmbeddedResource = "Gravatun.GraviGrancumReport.rdlc";
            reportViewer1.RefreshReport();
于 2012-01-28T20:37:35.970 に答える
0

ローカル レポートを作成して PDF に生成したり、電子メールで送信したりできるサービスがある場合、あなたと同様の状況があります。ただし、ReportViewer.LocalReport は読み取り専用プロパティであるため、使用するコードを複製する必要がありました。レポートを作成するか、値を LocalReport から ReportViewer.LocalReport にコピーします。何かがコピーされない可能性がある (つまり、サブ レポート イベント) か、コードの重複があるため、私はどちらのオプションも好きではありません。

リフレクションを使用して ReportViewer に LocalReport を設定する次の拡張機能を思いつきました。私はこれを完全にテストしていないので、悪い考えかもしれません! ただし、現在取り組んでいるプロジェクトではうまくいくようです。ReportViewerがローカルレポートの追加の初期化を行うかどうかはわかりません。そのため、何かが爆発する可能性があります....

私はこれを十分に強調することはできません-あなた自身の責任で使用してください-おそらくこれを行うのは良い考えではありません

public static class ReportViewerExtensions
{
    public static void SetLocalReport(this ReportViewer reportViewer, LocalReport report)
    {
        var currentReportProperty = reportViewer.GetType().GetProperty("CurrentReport", BindingFlags.NonPublic | BindingFlags.Instance);
        if (currentReportProperty != null)
        {
            var currentReport = currentReportProperty.GetValue(reportViewer, null);
            var localReportField = currentReport.GetType().GetField("m_localReport", BindingFlags.NonPublic | BindingFlags.Instance);
            if (localReportField != null)
            {
                localReportField.SetValue(currentReport, report);
            }
        }
        reportViewer.RefreshReport();
    }
}

使用法:

LocalReport localReport = reportService.GenerateCurrentOrdersReport(....);
reportViewer.SetLocalReport(localReport);
于 2013-01-15T00:43:23.780 に答える