Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        // Обработчик получения данных по умолчанию
        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);
        }
Exemplo n.º 3
0
        // Обработчик сохранения данных по умолчанию
        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);
        }
Exemplo n.º 4
0
 // из FormBase
 protected override void DataList_GetData(object sender, ProcessDataEventArgs e)
 {
     base.DataList_GetData(sender, e);
     NeedRefresh = false;
 }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
        /// <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;
            }
        }