2024-12-03 20:14:30 +04:00

126 lines
3.9 KiB
C#

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