private void buttonSave_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(textBoxTitle.Text)) { MessageBox.Show("Заполните название", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (string.IsNullOrEmpty(controlTextBoxInput.InputText.ToString())) { MessageBox.Show("Заполните дату", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } try { var list = new List <BookTypeModel>(); foreach (var el in controlCheckedListBox.GetCheckedValues()) { var typeId = serviceT.GetId(el); list.Add(new BookTypeModel { TypeId = typeId, TypeTitle = serviceT.GetElement(typeId).Title }); } if (id.HasValue) { serviceB.UpdElement(new BookModel { Id = id.Value, Title = textBoxTitle.Text, Date = controlTextBoxInput.InputText, BookTypes = list }); } else { serviceB.AddElement(new BookModel { Title = textBoxTitle.Text, Date = controlTextBoxInput.InputText, BookTypes = list }); } MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); DialogResult = DialogResult.OK; Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void FormType_Load(object sender, EventArgs e) { if (id.HasValue) { try { TypeModel view = serviceT.GetElement(id.Value); if (view != null) { textBoxType.Text = view.Title; } } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
private void buttonOk_Click(object sender, EventArgs e) { var listBookTypes = new List <BookTypeModel>(); foreach (var checkedValue in controlCheckedListType.GetCheckedValues()) { var typeId = serviceT.GetId(checkedValue); listBookTypes.Add(new BookTypeModel { TypeId = typeId, TypeTitle = serviceT.GetElement(typeId).Title }); } using (LibraryDbContext context = new LibraryDbContext()) { var propertyInfos = typeof(BookTypeModel).GetProperties(); var types = new List <BookType>(); // книга, у которой будем менять список типов var book = context.Books.FirstOrDefault(rec => rec.Id == bookId); // простое копирование в новый список foreach (var el in listBookTypes) { var element = new BookType(); foreach (var property in propertyInfos) { var value = el.GetType().GetProperty(property.Name).GetValue(el); element.GetType().GetProperty(property.Name).SetValue(element, value); } types.Add(element); } // список уникальных id типов var typeIds = types.Select(rec => rec.TypeId).Distinct(); // удаляем лишние записи (книготипы, которых нет в обновлённой версии) context.BookTypes.RemoveRange(context.BookTypes.Where(rec => rec.BookId == bookId && !typeIds.Contains(rec.TypeId))); context.SaveChanges(); // лол, это ж distinct новых типов? или нет? var grouppedTypes = types .GroupBy(rec => rec.TypeId) .Select(rec => new { TypeId = rec.Key }); foreach (var grouppedType in grouppedTypes) { // вроде как заголовок типа (заголовком является первый попавшийся тип для этой книги) var firstBookType = context.BookTypes.FirstOrDefault(rec => rec.BookId == bookId && rec.TypeId == grouppedType.TypeId); // (?) если заголовка нет, генерим новый if (firstBookType == null) { context.BookTypes.Add(new BookType { TypeId = grouppedType.TypeId, BookId = bookId, TypeTitle = context.Types.FirstOrDefault(rec => rec.Id == grouppedType.TypeId).Title }); context.SaveChanges(); } } } MessageBox.Show("Выполнено успешно", "Готово", MessageBoxButtons.OK, MessageBoxIcon.Information); }