2

我有一个看起来像这样的代码块

CrystalReport2 report1 = new CrystalReport2();
                    report1.SetParameterValue("@StartDate", startDate);
                    report1.SetParameterValue("@EndDate", endDate);
                    report1.SetParameterValue("@show", 1);
                    report1.SetParameterValue("@name", name);


                    string fullFileName = //filename;
                    report1.ExportToDisk(ExportFormatType.Excel, fullFileName);
                    report1.Close();
                    report1.Dispose();

我有几个这样的报告,每个报告的代码块几乎相同。它们都使用相同的参数集并以相同的方式导出。

它们都生成不同的数据集(因此我有一些报告)。

所以我只能看到一个喜欢改变一个

CrystalReport2 report1 = new CrystalReport2();
CrystalReport3 report2 = new CrystalReport3();

那么我可以使上面的代码成为可以接受任何报告的方法吗?

4

1 回答 1

3

您可以使用这样的助手:

    public static void MyReportsCommonTasks(
        CrystalDecisions.CrystalReports.Engine.ReportClass report,
        DateTime startDate,
        DateTime endDate,
        String name,
        String fullFileName)
    {
        report.SetParameterValue("@StartDate", startDate);
        report.SetParameterValue("@EndDate", endDate);
        report.SetParameterValue("@show", 1);
        report.SetParameterValue("@name", name);
        report.ExportToDisk(ExportFormatType.Excel, fullFileName);
        report.Close();
        report.Dispose();
    }

请注意,这是可能的,因为报告从CrystalDecisions.CrystalReports.Engine.ReportClass

按照如何在方法中实例化报告的示例:

    public static void MyReportsCommonTasks<R>(
        DateTime startDate,
        DateTime endDate,
        String name,
        String fullFileName) 
        where R : CrystalDecisions.CrystalReports.Engine.ReportClass, new()
    {
        ReportClass report = new R();
        report.SetParameterValue("@StartDate", startDate);
        report.SetParameterValue("@EndDate", endDate);
        report.SetParameterValue("@show", 1);
        report.SetParameterValue("@name", name);
        report.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.Excel, fullFileName);
        report.Close();
        report.Dispose();
    }
于 2012-07-12T16:51:02.190 回答