/// <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); } }); }
/// <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); } }); }