예제 #1
0
        /// <summary>
        /// Добавление нового правила
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ButtonAddClick(object sender, EventArgs e)
        {
            //Открывается форма добавления
            var f = new AddChangeRule(_esCopy, _filePath, _dbCopyFileName, "Добавление правила",
                                      new List <AddChangeRule.Fact>(), new List <AddChangeRule.Fact>(), string.Empty,
                                      string.Empty);

            if (f.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            var same = _esCopy.Rules.Where(x => x.Name.ToLower() == f.RuleName.ToLower());

            if (same.Any())
            {
                MessageBox.Show("Правило с таким именем уже существует");
                return;
            }
            //Если все ок, то добавляем правило в копию БД
            //добавляем в rules
            var r = new Rules
            {
                Name    = f.RuleName,
                Explain = f.Explanation,
                Number  = listViewRules.Items.Count + 1
            };

            _esCopy.Rules.InsertOnSubmit(r);
            _esCopy.SubmitChanges();
            var ruleID = r.Id;

            //добавляем посылки
            AddFacts(f.InFact, ruleID);
            //добавляем заключения
            AddConclusions(f.InConclusion, ruleID);
            //заполнение listViewRules
            //FillListViewRules();
            if (_selectedRule != null && _selectedRule.Number != null)
            {
                AddRuleToListView(r, (int)_selectedRule.Number);
            }
            else
            {
                AddRuleToListView(r, listViewRules.Items.Count);
            }
            RenumberRules();
            if (!_somethingChanged)
            {
                Text += "*";
            }
            _somethingChanged = true;
        }
예제 #2
0
        /// <summary>
        /// Изменение выбранного правила
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ButtonChangeClick(object sender, EventArgs e)
        {
            if (_selectedRule == null)
            {
                return;
            }
            //удаляем запись об этом правиле из листвью
            int index = 0;

            if (_selectedRule.Number != null)
            {
                index = (int)_selectedRule.Number;
            }
            var oldRule = new Rules
            {
                Name    = _selectedRule.Name,
                Id      = _selectedRule.Id,
                Number  = _selectedRule.Number,
                Explain = _selectedRule.Explain
            };
            //DelRuleFromListView(_selectedRule);
            //список посылок правила
            var factList = _esCopy.Facts.Where(x => x.RuleID == _selectedRule.Id).
                           Select(ff => new AddChangeRule.Fact
            {
                ValName = ff.Values.Name,
                VarName = ff.Variables.Name,
                Num     = ff.Number
            }).ToList();
            //список заключений правила
            var concList = _esCopy.Conclusions.Where(x => x.RuleID == _selectedRule.Id).
                           Select(cc => new AddChangeRule.Fact
            {
                ValName = cc.Values.Name,
                VarName = cc.Variables.Name,
                Num     = cc.Number
            }).ToList();
            //открываем форму изменения
            var f = new AddChangeRule(_esCopy, _filePath, _dbCopyFileName, "Изменение правила",
                                      factList, concList, _selectedRule.Name, _selectedRule.Explain);

            if (f.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            //Если все ок, то добавляем правило в копию БД
            //добавляем в rules
            _selectedRule.Name    = f.RuleName;
            _selectedRule.Explain = f.Explanation;
            //добавляем посылки
            var factsInSelectedRule = _esCopy.Facts.Where(x => x.Rules == _selectedRule);

            foreach (Facts facts in factsInSelectedRule)
            {
                _esCopy.Facts.DeleteOnSubmit(facts);
                _esCopy.SubmitChanges();
            }
            AddFacts(f.InFact, _selectedRule.Id);
            //добавляем заключения
            var conclusionsInSelectedRule = _esCopy.Conclusions.Where(x => x.Rules == _selectedRule);

            foreach (var conc in conclusionsInSelectedRule)
            {
                _esCopy.Conclusions.DeleteOnSubmit(conc);
                _esCopy.SubmitChanges();
            }
            AddConclusions(f.InConclusion, _selectedRule.Id);
            //заполнение listViewRules
            //FillListViewRules();
            DelRuleFromListView(oldRule);
            AddRuleToListView(_selectedRule, index - 1);
            RenumberRules();
            if (!_somethingChanged)
            {
                Text += "*";
            }
            _somethingChanged = true;
        }