using ProjectLibrary.Entities; using ProjectLibrary.Entities.Enums; using ProjectLibrary.Repositores; using ProjectLibrary.Repositories; namespace ProjectLibrary.Forms { public partial class FBook : Form { private readonly IBookRepository _bookRepository; private int? _bookId; public int Id { set { try { var book = _bookRepository.ReadBookById(value); if (book == null) { throw new InvalidOperationException("Книга не найдена."); } txtAuthor.Text = book.Author; txtName.Text = book.Name; //cmbType.SelectedItem = book.Type; comboBoxLibrary.SelectedItem = book.LibraryID; _bookId = value; } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка при загрузке данных", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } public FBook(IBookRepository bookRepository, ILibraryRepository libraryRepository) { InitializeComponent(); _bookRepository = bookRepository ?? throw new ArgumentNullException(nameof(bookRepository)); comboBoxLibrary.DataSource = libraryRepository.ReadLibraries(); foreach(var elem in Enum.GetValues(typeof(BookType))) { if (!elem.Equals(BookType.None)) checkedListBox1.Items.Add(elem); } } private void btnSave_Click(object sender, EventArgs e) { try { if (string.IsNullOrWhiteSpace(txtAuthor.Text) || string.IsNullOrWhiteSpace(txtName.Text) || comboBoxLibrary.SelectedItem == null) { throw new Exception("Имеются незаполненные поля."); } BookType selectedType = BookType.None; foreach (var item in checkedListBox1.CheckedItems) { if (item is BookType type) { selectedType |= type; } } var book = Book.CreateEntity( _bookId ?? 0, txtAuthor.Text, txtName.Text, Convert.ToInt32(comboBoxLibrary.SelectedItem), selectedType ); if (_bookId.HasValue) { _bookRepository.UpdateBook(book); } else { _bookRepository.CreateBook(book); } Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка при сохранении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void ButtonCancel_Click(object sender, EventArgs e) { Close(); } private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) { try { BookType selectedType = BookType.None; foreach (var item in checkedListBox1.CheckedItems) { if (item is BookType type) { selectedType |= type; } } var book = _bookRepository.ReadBookById(_bookId ?? 0); book.Type = selectedType; } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка при обработке выбора", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }