private void CompleteHandler(object sender, EventArgs e) { var btn = (SimpleButton) sender; if (btn.Name == "buttonCancel") { OnCompleted(new FormulaPeekArgs() { Write = false }); return; } var args = new FormulaPeekArgs { Write = this.IsAvailable }; if (IsAvailable) { foreach (int index in this.gridViewMunicipality.GetSelectedRows()) { var munit = (municipality) this.gridViewMunicipality.GetRow(index); var data = munit.municipality_form_data .FirstOrDefault(t => t.form.form_id == _regularForm.form_id && t.send_date.Year == _year); if (data == null) continue; args.FormDataList.Add(data); } args.FormulaBytes = _formula.file_data; } OnCompleted(args); }
protected virtual void OnCompleted(FormulaPeekArgs e) { var handler = Completed; if (handler != null) handler(this, e); }
private async void formulaPeekControl_Completed(object sender, FormulaPeekArgs e) { this.windowsUIButtonPanelActions.HidePeekForm(); if (!e.Write) return; try { this.spreadsheetControl.BeginUpdate(); var messages = new List<string>(); using (new MarqueeProgressDialog(this.ParentForm, description: "Обработка данных")) { await Task.Run(() => { using (var spreadsheet = new SpreadsheetControl {AllowDrop = false}) { using (var ms = new MemoryStream(e.FormulaBytes)) { var formulas = FormulaExpressionParser.ParseStream(ms); //TODO: rewrite var formDatas = e.FormDataList; for (var i = 0; i < formDatas.Count; i++) { var formData = formDatas[i]; var formBytes = formData.file.contents; var format = formData.document_format.IsOpenXml() ? DocumentFormat.OpenXml : DocumentFormat.Xls; spreadsheet.LoadDocument(formBytes, format); foreach (var formula in formulas) { formula.Source = spreadsheet.Document; formula.Target = this.spreadsheetControl.Document; try { if (i == 0) formula.WriteToTarget(); else formula.AppendToTarget(); } catch { messages.AddRange(formula.ErrorMessages.Where(errorMessage => !messages.Contains(errorMessage))); } } } } } }); } if (messages.Count > 0) { var countToTake = 10; var takenMessages = messages.Take(countToTake).ToList(); if (takenMessages.Count > countToTake) takenMessages.Add("..."); var message = string.Join("\n", takenMessages); this.ShowFlyoutMessageBox("Ошибка заполнения", message); } } catch (Exception ex) { this.ShowFlyoutMessageBox("Ошибка", ex.Message, FlyoutCommand.OK); } finally { this.spreadsheetControl.EndUpdate(); } }