예제 #1
0
 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);
     }
 }
예제 #2
0
 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);
        }