/// <summary>
 /// Асинхронно выполняет загрузку данных и при ошибках показывает сообщение, иначе если все успешно прошло, выполняет делегат
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="caption"></param>
 /// <param name="argument"></param>
 /// <param name="execCommand"></param>
 /// <param name="workSuccessEnded"></param>
 public static void RunAsyncWithWaitDialog(DependencyObject sender, string caption, object argument, UniDbCommand execCommand, RunWorkerCompletedEventHandler workSuccessEnded)
 {
     AbortableBackgroundWorker.RunAsyncWithWaitDialog(sender, caption,
                                                      (p, pw) =>
     {
         UniDbAdapter a = pw.Argument as UniDbAdapter;
         DataSet ds     = new DataSet();
         a.Fill(ds);
         pw.Result = ds;
     }, argument, execCommand,
                                                      (p, pw) =>
     {
         if (pw.Cancelled)
         {
             return;
         }
         else if (pw.Error != null)
         {
             MessageBox.Show(pw.Error.GetFormattedException(), "Ошибка получения данных");
         }
         else
         {
             workSuccessEnded(p, pw);
         }
     });
 }
Esempio n. 2
0
 /// <summary>
 /// Выгружает рдлс репорт в эксель используя метод Render
 /// </summary>
 /// <param name="sender">окно владелец</param>
 /// <param name="path">путь к отчету RDLC</param>
 /// <param name="SaveFileName">имя для сохранения по умолчанию</param>
 /// <param name="tables"> таблицы для отчета</param>
 /// <param name="r">список параметров для отчета</param>
 public static void RenderToExcel(DependencyObject sender, string path, string SaveFileName, string initDirectory, DataTable[] tables, IEnumerable <ReportParameter> r)
 {
     AbortableBackgroundWorker.RunAsyncWithWaitDialog(sender, "Формирование отчета",
                                                      (bwk, e) =>
     {
         LocalReport f = new LocalReport();
         f.LoadReportDefinition(File.OpenRead(AppLocalPath.CurrentAppPath + @"\Reports\" + path));
         f.DataSources.Clear();
         tables = e.Argument as DataTable[];
         if (tables != null)
         {
             for (int i = 1; i <= tables.Length; ++i)
             {
                 f.DataSources.Add(new ReportDataSource(string.Format("DataSet{0}", i), tables[i - 1]));
             }
         }
         if (r != null)
         {
             f.SetParameters(r);
         }
         e.Result = f.Render("Excel");
     },
                                                      tables, null,
                                                      (bwk, e) =>
     {
         if (e.Cancelled)
         {
             return;
         }
         else
         if (e.Error != null)
         {
             System.Windows.MessageBox.Show(e.Error.Message, "Ошибка формирования отчета");
         }
         else
         {
             try
             {
                 SaveFileDialog sf   = new SaveFileDialog();
                 sf.FileName         = SaveFileName;
                 sf.Filter           = "Файлы Excel|*.xls";
                 sf.InitialDirectory = initDirectory;
                 if (sf.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                 {
                     File.WriteAllBytes(sf.FileName, (byte[])e.Result);
                     System.Diagnostics.Process.Start(sf.FileName);
                 }
             }
             catch (Exception ex)
             {
                 System.Windows.MessageBox.Show("Ошибка формирования", ex.Message);
             }
         }
     });
 }
 /// <summary>
 /// Асинхронно выполняет команду и при ошибках показывает сообщение, иначе если все успешно прошло, выполняет делегат
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="caption"></param>
 /// <param name="argument"></param>
 /// <param name="execCommand"></param>
 /// <param name="workSuccessEnded"></param>
 public static void RunAsyncWithWaitDialog(DependencyObject sender, string caption, UniDbCommand execCommand, RunWorkerCompletedEventHandler workSuccessEnded)
 {
     AbortableBackgroundWorker.RunAsyncWithWaitDialog(sender, caption,
                                                      (p, pw) =>
     {
         execCommand.ExecuteNonQuery();
     }, null, execCommand,
                                                      (p, pw) =>
     {
         if (pw.Cancelled)
         {
             return;
         }
         else if (pw.Error != null)
         {
             MessageBox.Show(pw.Error.GetFormattedException(), "Ошибка получения данных");
         }
         else
         {
             workSuccessEnded(p, pw);
         }
     });
 }