using System; using System.Data; using System.Windows.Forms; namespace WindowsFormsApp4 { public partial class AddressesForm : Form { private DataTable addressesTable; public AddressesForm() { InitializeComponent(); AttachEventHandlers(); LoadAddresses(); ConfigureGrid(); } private void AttachEventHandlers() { btnRefresh.Click += BtnRefresh_Click; btnAdd.Click += BtnAdd_Click; btnEdit.Click += BtnEdit_Click; btnDelete.Click += BtnDelete_Click; btnSetMain.Click += BtnSetMain_Click; btnBack.Click += BtnBack_Click; } private void LoadAddresses() { try { if (!Session.CurrentUser.ClientId.HasValue) { MessageBox.Show("Ошибка: не удалось определить ID клиента", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } addressesTable = DatabaseHelper.GetClientAddressesWithDetails(Session.CurrentUser.ClientId.Value); dgvAddresses.DataSource = addressesTable; ConfigureGrid(); } catch (Exception ex) { MessageBox.Show($"Ошибка загрузки адресов: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void ConfigureGrid() { if (dgvAddresses.Columns.Count == 0) return; // Настройка заголовков if (dgvAddresses.Columns.Contains("address_id")) dgvAddresses.Columns["address_id"].HeaderText = "ID"; if (dgvAddresses.Columns.Contains("city")) dgvAddresses.Columns["city"].HeaderText = "Город"; if (dgvAddresses.Columns.Contains("street")) dgvAddresses.Columns["street"].HeaderText = "Улица"; if (dgvAddresses.Columns.Contains("house")) dgvAddresses.Columns["house"].HeaderText = "Дом"; if (dgvAddresses.Columns.Contains("building")) dgvAddresses.Columns["building"].HeaderText = "Корпус"; if (dgvAddresses.Columns.Contains("apartment")) dgvAddresses.Columns["apartment"].HeaderText = "Квартира"; if (dgvAddresses.Columns.Contains("address_type")) { dgvAddresses.Columns["address_type"].HeaderText = "Тип"; // Преобразуем значения типов в читаемый вид dgvAddresses.Columns["address_type"].DefaultCellStyle.Format = ""; } if (dgvAddresses.Columns.Contains("priority")) dgvAddresses.Columns["priority"].HeaderText = "Приоритет"; // Настройка цвета строк dgvAddresses.DefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(50, 56, 67); dgvAddresses.DefaultCellStyle.ForeColor = System.Drawing.Color.FromArgb(203, 232, 87); dgvAddresses.DefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(198, 141, 255); dgvAddresses.DefaultCellStyle.SelectionForeColor = System.Drawing.Color.FromArgb(50, 56, 67); dgvAddresses.ColumnHeadersDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(198, 141, 255); dgvAddresses.ColumnHeadersDefaultCellStyle.ForeColor = System.Drawing.Color.FromArgb(50, 56, 67); dgvAddresses.EnableHeadersVisualStyles = false; dgvAddresses.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; } private void BtnRefresh_Click(object sender, EventArgs e) { LoadAddresses(); } private void BtnAdd_Click(object sender, EventArgs e) { AddressEditForm form = new AddressEditForm(); if (form.ShowDialog() == DialogResult.OK) { LoadAddresses(); MessageBox.Show("Адрес успешно добавлен", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void BtnEdit_Click(object sender, EventArgs e) { if (dgvAddresses.CurrentRow == null) { MessageBox.Show("Выберите адрес для редактирования", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } int addressId = Convert.ToInt32(dgvAddresses.CurrentRow.Cells["address_id"].Value); string city = dgvAddresses.CurrentRow.Cells["city"].Value.ToString(); string street = dgvAddresses.CurrentRow.Cells["street"].Value.ToString(); string house = dgvAddresses.CurrentRow.Cells["house"].Value.ToString(); string building = dgvAddresses.CurrentRow.Cells["building"].Value?.ToString(); string apartment = dgvAddresses.CurrentRow.Cells["apartment"].Value?.ToString(); AddressEditForm form = new AddressEditForm(addressId, city, street, house, building, apartment); if (form.ShowDialog() == DialogResult.OK) { LoadAddresses(); MessageBox.Show("Адрес успешно обновлён", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void BtnDelete_Click(object sender, EventArgs e) { if (dgvAddresses.CurrentRow == null) { MessageBox.Show("Выберите адрес для удаления", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } int addressId = Convert.ToInt32(dgvAddresses.CurrentRow.Cells["address_id"].Value); string addressText = $"{dgvAddresses.CurrentRow.Cells["city"].Value}, {dgvAddresses.CurrentRow.Cells["street"].Value}, {dgvAddresses.CurrentRow.Cells["house"].Value}"; DialogResult result = MessageBox.Show($"Удалить адрес: {addressText}?\nВНИМАНИЕ: Удалить можно только адрес, который не используется в заявках!", "Подтверждение удаления", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (result == DialogResult.Yes) { if (DatabaseHelper.DeleteClientAddress(Session.CurrentUser.ClientId.Value, addressId)) { LoadAddresses(); MessageBox.Show("Адрес успешно удалён", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("Ошибка при удалении адреса.\nВозможно, адрес используется в заявках.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } private void BtnSetMain_Click(object sender, EventArgs e) { if (dgvAddresses.CurrentRow == null) { MessageBox.Show("Выберите адрес", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } int addressId = Convert.ToInt32(dgvAddresses.CurrentRow.Cells["address_id"].Value); string addressText = $"{dgvAddresses.CurrentRow.Cells["city"].Value}, {dgvAddresses.CurrentRow.Cells["street"].Value}, {dgvAddresses.CurrentRow.Cells["house"].Value}"; DialogResult result = MessageBox.Show($"Сделать адрес {addressText} основным?", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { if (DatabaseHelper.SetMainAddress(Session.CurrentUser.ClientId.Value, addressId)) { LoadAddresses(); MessageBox.Show("Основной адрес обновлён", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("Ошибка при установке основного адреса", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } private void BtnBack_Click(object sender, EventArgs e) { this.Close(); } } }