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; //checkedListBox1.SelectedItem = book.TypeBookID; char[] listInd = Convert.ToString((int)book.TypeBookID, 2).ToCharArray(); for (int i = 0; i < listInd.Length; i++) { checkedListBox1.SetItemChecked(i, listInd[i]=='1'); } _bookId = value; } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка при загрузке данных", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } public FBook(IBookRepository bookRepository) { InitializeComponent(); _bookRepository = bookRepository ?? throw new ArgumentNullException(nameof(bookRepository)); 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)) { throw new Exception("Имеются незаполненные поля."); } if (_bookId.HasValue) { _bookRepository.UpdateBook(CreateBook(_bookId.Value)); } else { _bookRepository.CreateBook(CreateBook(0)); } Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка при сохранении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private Book CreateBook(int bookId) { BookType selectedType = BookType.None; foreach (var item in checkedListBox1.CheckedItems) { if (item is BookType type) { selectedType |= type; // Это должно работать, если тип является BookType } } return Book.CreateEntity(bookId, txtAuthor.Text, txtName.Text, selectedType); } private void ButtonCancel_Click(object sender, EventArgs e) { Close(); } } }