【问题标题】:Repetitive C# code重复的 C# 代码
【发布时间】:2015-04-10 23:36:48
【问题描述】:

我正在创建一个小型应用程序,只需单击一下即可从水晶报表生成 12 个 PDF 文件。每个 PDF 文件都有不同的参数。 该代码正在运行,但我想让它更短,因为它非常重复。由于我是编程新手,我不知道如何实现这一点。

任何想法将不胜感激。

这里是代码。

 private void button1_Click(object sender, EventArgs e)
    {

        cryRpt.Load(@"\\klb-lims\Crystal\TrendFailure.rpt");


        cryRpt.Load(@"\\Server\Crystal\TrendFailure.rpt");

        ExportOptions CrExportOptions;
        DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions();
        PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions();

         try
        {

            //GENCHEM
            cryRpt.SetParameterValue("AnalysisType", "GENCHEM");
            CrDiskFileDestinationOptions.DiskFileName = (GENCHEM);
            CrExportOptions = cryRpt.ExportOptions;

            {
                CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
                CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
                CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;
                CrExportOptions.FormatOptions = CrFormatTypeOptions;
            }
              cryRpt.Export();


              //IC
              cryRpt.SetParameterValue("AnalysisType", "IC");
              CrDiskFileDestinationOptions.DiskFileName = (IC);
              CrExportOptions = cryRpt.ExportOptions;

              {
                  CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
                  CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
                  CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;
                  CrExportOptions.FormatOptions = CrFormatTypeOptions;
              }
              cryRpt.Export();

              //ICPMS
              cryRpt.SetParameterValue("AnalysisType", "ICPMS");
              CrDiskFileDestinationOptions.DiskFileName = (ICPMS);
              CrExportOptions = cryRpt.ExportOptions;

              {
                  CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
                  CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
                  CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;
                  CrExportOptions.FormatOptions = CrFormatTypeOptions;
              }
              cryRpt.Export();

              //ICPOES
              cryRpt.SetParameterValue("AnalysisType", "ICPOES");
              CrDiskFileDestinationOptions.DiskFileName = (ICPOES);
              CrExportOptions = cryRpt.ExportOptions;

              {
                  CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
                  CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
                  CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;
                  CrExportOptions.FormatOptions = CrFormatTypeOptions;
              }
              cryRpt.Export();
}
  catch (Exception ex)

         {
            MessageBox.Show(ex.ToString());

         }

我不包括这 13 个块,但你可以知道我在说什么。

以下是我用来保存 PDF 文件的字符串。 水晶报表参数是固定的。

    string GENCHEM = "c:\\temp\\GENCHEM_TrendFailure.pdf";
    string IC = "c:\\temp\\IC_TrendFailure.pdf";
    string ICPMS = "c:\\temp\\ICPMS_TrendFailure.pdf";
    string ICPOES = "c:\\temp\\ICPOES_TrendFailure.pdf";
    string METALS = "c:\\temp\\METALS_TrendFailure.pdf";
    string MICRO = "c:\\temp\\MICRO_TrendFailure.pdf";
    string ORGANIC = "c:\\temp\\ORGANIC_TrendFailure.pdf";
    string SOILPREP = "c:\\temp\\SOILPREP_TrendFailure.pdf";
    string SUBOUT = "c:\\temp\\SUBOUT_TrendFailure.pdf";
    string SVOC = "c:\\temp\\SVOC_TrendFailure.pdf";
    string VOC = "c:\\temp\\VOC_TrendFailure.pdf";
    string WASTEWATER = "c:\\temp\\WASTEWATER_TrendFailure.pdf";

【问题讨论】:

  • 将核心代码移动到方法中,并将不重复的元素作为参数传递

标签: c# pdf crystal-reports


【解决方案1】:

我对您似乎在这里使用的任何库都不是很熟悉,但我认为一个好的方法是将这 13 个字符串放入 tuples 的数组中。然后,你会这样做:

List<Tuple<String, String>> entries = new List<Tuple<String, String>>();
entries.Add(new Tuple<String, String>("GENCHEM, "c:\\temp\\GENCHEM_TrendFailure.pdf");
entries.Add(new Tuple<String, String>("IC, ""c:\\temp\\IC_TrendFailure.pdf"");

等等。

然后你会遍历列表并说:

for (Tuple<String, String> entry : entries)
{
    cryRpt.SetParameterValue("AnalysisType", "entry.Item1");
    CrDiskFileDestinationOptions.DiskFileName = (entry.Item2);
//Run through your export options or whatever here, then export
}

基本上,列表允许您循环访问任意数量的条目,同时仍为您提供文件名和条目名称。

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 2015-01-15
    • 2012-06-08
    • 2015-08-26
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    相关资源
    最近更新 更多