2015-04-10 5 views
0

Я создаю небольшое приложение, в котором я генерирую 12 PDF-файлов из хрустального отчета одним щелчком мыши. Каждый PDF-файл имеет разные параметры. Код работает, но я хотел бы сделать его короче, потому что он очень повторяющийся. Поскольку я новичок в программировании, я не знаю, как этого добиться.Повторяющийся код C#

Любые идеи будут оценены.

Вот код.

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"; 
+2

переместить основной код в метод и передать не повторяющиеся элементы в качестве параметров – Plutonix

ответ

0

Я не очень хорошо знаком с тем, что библиотекой вы, кажется, используют здесь, но я думаю, что хороший подход был бы поставить эти тринадцати строк в массив 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 
} 

В принципе, список позволяет проходным как много записей, как вы хотите, в то же время давая вам имя имя файла и запись.

+0

Спасибо. Это решило мою проблему. – Alberto

Смежные вопросы