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