重复的 C# 代码
Repetitive C# code
我正在创建一个小型应用程序,只需单击一下即可从 crystal 报告生成 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 文件的字符串。
crystal 报告参数是固定的。
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";
我不太熟悉你在这里使用的任何库,但我认为一个好的方法是将这 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
}
基本上,该列表允许您遍历任意数量的条目,同时仍然为您提供文件名和条目名称。
我正在创建一个小型应用程序,只需单击一下即可从 crystal 报告生成 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 文件的字符串。 crystal 报告参数是固定的。
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";
我不太熟悉你在这里使用的任何库,但我认为一个好的方法是将这 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
}
基本上,该列表允许您遍历任意数量的条目,同时仍然为您提供文件名和条目名称。