/// <summary>Обработка события грида по получению данных - приходит из LoadData() -> OnGetData() объекта DataList</summary> protected virtual void DataList_GetData(object sender, ProcessDataEventArgs e) { var list = (sender as DataList); if (e.Handled || list == null || (string.IsNullOrWhiteSpace(list.QuerySql) && string.IsNullOrWhiteSpace(list.QueryCmdCode))) { return; } // почистить от предыдущих list.Clear(); Context.GcCollect(); // получить данные e.Result = Ctx?.GetTable(list.QuerySql, list.QueryCmdCode, e.Pars); }
// Обработчик получения данных по умолчанию void FormEdit_GetData(object sender, ProcessDataEventArgs e) { if (e.Handled) { return; } string sql = IsNewRec ? SelectNewSql : SelectSql; string cmdCode = IsNewRec ? SelectNewCmdCode : SelectCmdCode; if (string.IsNullOrWhiteSpace(sql) && string.IsNullOrWhiteSpace(cmdCode)) { return; } e.Result = Ctx?.GetTable(sql, cmdCode, e.Pars); }
// Обработчик сохранения данных по умолчанию void FormEdit_SetData(object sender, ProcessDataEventArgs e) { if (e.Handled) { return; } string sql = IsNewRec ? InsertSql : UpdateSql; string cmdCode = IsNewRec ? InsertCmdCode : UpdateCmdCode; if (string.IsNullOrWhiteSpace(sql) && string.IsNullOrWhiteSpace(cmdCode)) { e.Result = false; Loger.SendMess("Не задана команда для сохранения данных!", true); return; } e.Result = Ctx?.GetTable(sql, cmdCode, e.Pars); }
// из FormBase protected override void DataList_GetData(object sender, ProcessDataEventArgs e) { base.DataList_GetData(sender, e); NeedRefresh = false; }
/// <summary>Процесс сохранения данных из редактора</summary> protected bool SaveData() { error.Clear(); // принудительно заносим из контролов в объект-источник foreach (var b in Source.CurrencyManager.Bindings) { (b as Binding).WriteValue(); } var eaSaveParams = new ParamsCheckEventArgs { Pars = CtrlsProc.PrepareParams(SourceObject) }; SaveParamsCheck?.Invoke(this, eaSaveParams); var errs = eaSaveParams.CheckResult; CheckData(eaSaveParams.Pars, errs); if (errs?.Count > 0) { var msg = new StringBuilder(); foreach (var err in errs) { var c = this.GetControl(err.Key, true, Source) ?? this.GetControl(err.Key); if (c != null) { error.SetError(c, err.Value); } else { msg.AppendLine(err.Value); } } if (msg.Length > 0) { Loger.SendMess($"Ошибки ввода данных!\n{msg}", true); } return(false); } var eaSetData = new ProcessDataEventArgs() { Pars = eaSaveParams.Pars }; SetData?.Invoke(this, eaSetData); object res = null; var dt = (eaSetData.Result as DataTable); if (dt != null) { res = dt.Rows.Count > 0 ? CtrlsProc.PrepareParams(dt.Rows[0]) : null; } else if (eaSetData.Result != null) { res = CtrlsProc.PrepareParams(eaSetData.Result); } Ctx.TransferObject = res; if (res == null) { Loger.SendMess("Не получен результат операции!", true); } var ok = (res != null); if (ok) { Changed = false; WasSaved = true; Ctx.SaveLog("SAVE_FORM", $"Form {Name} ({Text}) was saved"); } return(ok); }
/// <summary>Процесс загрузки данных в редактор</summary> protected void LoadData() { if (LicenseManager.UsageMode != LicenseUsageMode.Runtime) { return; } try { var queryParams = CtrlsProc.PrepareParams(extParams, null, ExtParamsMap); // уточнение параметров var eaParams = new ParamsCheckEventArgs { Pars = queryParams }; QueryParamsCheck?.Invoke(this, eaParams); // запрос данных (если в потомке есть обработчик события - он вызовется первым и необходимо установить handled=true, чтобы не продолжать через FormEdit_GetData) var eaGetData = new ProcessDataEventArgs() { Pars = eaParams.Pars }; GetData?.Invoke(this, eaGetData); // проверка допустимости набора данных if (eaGetData.Result == null) { throw new Exception("Нет данных"); } if (eaGetData.Result is DataTable) { var dt = (DataTable)eaGetData.Result; if (dt.Rows.Count == 0) { throw new Exception("Нет данных"); } if (dt.Rows.Count > 1) { throw new Exception("Получено несколько записей"); } } Source.DataSource = eaGetData.Result; // подготовка списка для биндинга var fields = new List <string>(); if (Source.DataSource is DataTable) { fields = (Source.DataSource as DataTable)?.Columns.OfType <DataColumn>().Select(x => x.ColumnName).ToList(); } else { fields = TypeDescriptor.GetProperties(Source.DataSource).OfType <PropertyDescriptor>().Select(x => x.Name).ToList(); } foreach (var f in fields) { var c = this.GetControl(f); if (c != null && ValidParamControlType(c.GetType())) { DataMap.Add(new DataMapItem(f, c)); } } DataMapCreate?.Invoke(this, new EventArgs()); // настройки комбо для выбора из формы foreach (var sb in this.GetControls <SelectBox>()) { if (sb.SourceObject == null) { sb.SourceObject = SourceRow; } if (sb.TargetObject == null) { sb.TargetObject = SourceObject; } } // биндинг SetBindings(); AfterBinding?.Invoke(this, new EventArgs()); //Source.ResetBindings(false); // детальные данные if (!IsNewRec) { var pars = CtrlsProc.PrepareParams(SourceObject); foreach (var g in DataLists) { g.LoadData(null, pars); } } } catch (Exception ex) { Loger.SendMess(ex, "Ошибка получения данных на форму:"); Close(); } finally { Changed = false; } }