ProjectLib/ProjectLibrary/Forms/FBooks.cs
2024-12-03 20:14:30 +04:00

123 lines
4.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using ProjectLibrary.Repositores;
using Unity;
namespace ProjectLibrary.Forms
{
public partial class FBooks : Form
{
private readonly IUnityContainer _container;
private readonly IBookRepository _bookRepository;
public FBooks(IUnityContainer container, IBookRepository bookRepository)
{
InitializeComponent(); // Инициализация компонентов формы, включая DataGridView.
_container = container ?? throw new ArgumentNullException(nameof(container));
_bookRepository = bookRepository ?? throw new ArgumentNullException(nameof(bookRepository));
}
private void LoadList()
{
// Привязывает к DataGridView коллекцию книг, полученную из репозитория.
// Устанавливает источник данных DataGridView (dataGridViewBooks) как список объектов из ReadBooks().
dataGridViewBooks.DataSource = _bookRepository.ReadBooks();
}
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
// Проверяет, выбрана ли хотя бы одна строка в DataGridView.
if (dataGridViewBooks.SelectedRows.Count < 1)
{
// Если строка не выбрана, отображает сообщение об ошибке.
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
// Извлекает идентификатор (ID) из выбранной строки, используя значение ячейки столбца "Id".
id = Convert.ToInt32(dataGridViewBooks.SelectedRows[0].Cells["Id"].Value);
return true;
}
private void buttonAdd_Click(object sender, EventArgs e)
{
try
{
// Открывает форму добавления книги.
_container.Resolve<FBook>().ShowDialog();
// После добавления обновляет список записей в DataGridView.
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonUpdate_Click(object sender, EventArgs e)
{
// Получает ID выбранной строки из DataGridView.
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
// Открывает форму редактирования книги с указанным ID.
var form = _container.Resolve<FBook>();
form.Id = findId;
form.ShowDialog();
// После редактирования обновляет список записей в DataGridView.
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonRemove_Click(object sender, EventArgs e)
{
// Получает ID выбранной строки из DataGridView.
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
// Подтверждение удаления записи.
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
// Удаляет запись через репозиторий.
_bookRepository.DeleteBook(findId);
// После удаления обновляет список записей в DataGridView.
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void FBooks_Load(object sender, EventArgs e)
{
try
{
// При загрузке формы заполняет DataGridView данными из репозитория.
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}