/
denispirit
/
informationSystem
Обзор
Документация
Войти
/
denispirit
/
informationSystem
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
InformationSystem/MainForm.cs
297 строк
14 KB
denispirit
Первый коммит. Отправка в репозиторий
29 сен 2025, 10:39
29 сен 2025, 10:39
24ca85c
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace InformationSystem { public partial class MainForm : Form { private int currentUserId; // ID текущего пользователя private Database db = new Database(); // Экземпляр класса для работы с БД private List<RepairRequest> userRequests; // Список заявок пользователя // Конструктор, принимающий ID пользователя public MainForm(int userId) { InitializeComponent(); // Инициализация компонентов формы currentUserId = userId; // Сохраняем ID пользователя userRequests = new List<RepairRequest>(); // Инициализируем список заявок ApplyStyles(); } private void ApplyStyles() { StyleHelper.ApplyStyle(this); this.Text = "Система управления заявками"; this.Size = new Size(900, 600); this.Padding = new Padding(15); SetupLayout(); LoadUserRequests(); } private void SetupLayout() { this.Controls.Clear(); // Основной контейнер TableLayoutPanel mainContainer = new TableLayoutPanel(); mainContainer.Dock = DockStyle.Fill; mainContainer.RowCount = 4; mainContainer.ColumnCount = 1; mainContainer.Padding = new Padding(10); mainContainer.BackColor = Color.Transparent; mainContainer.RowStyles.Add(new RowStyle(SizeType.Absolute, 60)); // Заголовок mainContainer.RowStyles.Add(new RowStyle(SizeType.Absolute, 40)); // Инфо панель mainContainer.RowStyles.Add(new RowStyle(SizeType.Percent, 100)); // Таблица mainContainer.RowStyles.Add(new RowStyle(SizeType.Absolute, 50)); // Кнопки // Заголовок lblWelcome = new Label(); lblWelcome.Font = StyleHelper.TitleFont; lblWelcome.ForeColor = StyleHelper.PrimaryColor; lblWelcome.TextAlign = ContentAlignment.MiddleLeft; lblWelcome.Dock = DockStyle.Fill; mainContainer.Controls.Add(lblWelcome, 0, 0); // Информационная панель Panel infoPanel = new Panel(); infoPanel.Dock = DockStyle.Fill; infoPanel.BackColor = Color.Transparent; lblRequestCount = new Label(); StyleHelper.StyleLabel(lblRequestCount, true); lblRequestCount.Dock = DockStyle.Left; lblRequestCount.TextAlign = ContentAlignment.MiddleLeft; lblSelectedInfo = new Label(); StyleHelper.StyleLabel(lblSelectedInfo, false); lblSelectedInfo.Dock = DockStyle.Right; lblSelectedInfo.TextAlign = ContentAlignment.MiddleRight; lblSelectedInfo.ForeColor = StyleHelper.AccentColor; infoPanel.Controls.Add(lblSelectedInfo); infoPanel.Controls.Add(lblRequestCount); mainContainer.Controls.Add(infoPanel, 0, 1); // Таблица заявок dataGridViewRequests = new DataGridView(); StyleHelper.StyleDataGridView(dataGridViewRequests); dataGridViewRequests.Dock = DockStyle.Fill; dataGridViewRequests.CellDoubleClick += dataGridViewRequests_CellDoubleClick; dataGridViewRequests.SelectionChanged += dataGridViewRequests_SelectionChanged_1; mainContainer.Controls.Add(dataGridViewRequests, 0, 2); // Панель кнопок Panel buttonPanel = new Panel(); buttonPanel.Dock = DockStyle.Fill; buttonPanel.BackColor = Color.Transparent; Button btnNewRequest = new Button(); StyleHelper.StyleButton(btnNewRequest, true); btnNewRequest.Text = "Новая заявка"; btnNewRequest.Click += btnNewRequest_Click_1; btnNewRequest.Dock = DockStyle.Left; btnNewRequest.Margin = new Padding(0, 0, 10, 0); Button btnRefresh = new Button(); StyleHelper.StyleButton(btnRefresh, false); btnRefresh.Text = "Обновить"; btnRefresh.Click += btnRefresh_Click_1; btnRefresh.Dock = DockStyle.Left; btnRefresh.Margin = new Padding(0, 0, 10, 0); Button btnLogout = new Button(); StyleHelper.StyleButton(btnLogout, false); btnLogout.Text = "Выход"; btnLogout.Click += btnLogout_Click_1; btnLogout.Dock = DockStyle.Right; buttonPanel.Controls.Add(btnLogout); buttonPanel.Controls.Add(btnRefresh); buttonPanel.Controls.Add(btnNewRequest); mainContainer.Controls.Add(buttonPanel, 0, 3); this.Controls.Add(mainContainer); } // Метод для загрузки заявок пользователя из базы данных private void LoadUserRequests() { userRequests = db.GetUserRepairRequests(currentUserId); // Получаем заявки из БД dataGridViewRequests.DataSource = userRequests; // Привязываем данные к таблице lblRequestCount.Text = $"Всего заявок: {userRequests.Count}"; // Обновляем счетчик } // Метод для настройки внешнего вида DataGridView private void SetupDataGridView() { dataGridViewRequests.AutoGenerateColumns = false; // Отключаем авто-генерацию столбцов dataGridViewRequests.Columns.Clear(); // Очищаем существующие столбцы // Добавляем столбец "Тип устройства" dataGridViewRequests.Columns.Add(new DataGridViewTextBoxColumn() { Name = "DeviceType", HeaderText = "Тип устройства", DataPropertyName = "DeviceType", Width = 120 }); // Добавляем столбец "Бренд/Модель" dataGridViewRequests.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Brand", HeaderText = "Бренд", DataPropertyName = "Brand", Width = 100 }); // Добавляем столбец "Модель" dataGridViewRequests.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Model", HeaderText = "Модель", DataPropertyName = "Model", Width = 100 }); // Добавляем столбец "Описание проблемы" dataGridViewRequests.Columns.Add(new DataGridViewTextBoxColumn() { Name = "ProblemDescription", HeaderText = "Описание проблемы", DataPropertyName = "ProblemDescription", Width = 200 }); // Добавляем столбец "Статус" dataGridViewRequests.Columns.Add(new DataGridViewTextBoxColumn() { Name = "Status", HeaderText = "Статус", DataPropertyName = "Status", Width = 100 }); // Добавляем столбец "Дата создания" dataGridViewRequests.Columns.Add(new DataGridViewTextBoxColumn() { Name = "CreatedDate", HeaderText = "Дата создания", DataPropertyName = "CreatedDate", Width = 120 }); // Настраиваем внешний вид таблицы dataGridViewRequests.RowHeadersVisible = false; // Скрываем заголовки строк dataGridViewRequests.SelectionMode = DataGridViewSelectionMode.FullRowSelect; // Разрешаем выделение строк dataGridViewRequests.ReadOnly = true; // Запрещаем редактирование dataGridViewRequests.AllowUserToAddRows = false; // Запрещаем добавление строк } private void btnNewRequest_Click_1(object sender, EventArgs e) { NewRepairRequestForm newRequestForm = new NewRepairRequestForm(currentUserId); // Создаем форму новой заявки if (newRequestForm.ShowDialog() == DialogResult.OK) // Открываем как модальное окно { LoadUserRequests(); // Перезагружаем заявки после создания новой MessageBox.Show("Заявка успешно создана!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void btnLogout_Click_1(object sender, EventArgs e) { // Подтверждение выхода DialogResult result = MessageBox.Show("Вы уверены, что хотите выйти?", "Выход", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) // Если пользователь подтвердил выход { LoginForm loginForm = new LoginForm(); // Создаем форму входа loginForm.Show(); // Показываем форму входа this.Close(); // Закрываем текущую форму } } private void btnRefresh_Click_1(object sender, EventArgs e) { LoadUserRequests(); // Перезагружаем заявки из базы данных } private void btnViewDetails_Click(object sender, EventArgs e) { } private void MainForm_Load_1(object sender, EventArgs e) { LoadUserRequests(); // Загружаем заявки пользователя SetupDataGridView(); // Настраиваем внешний вид таблицы lblWelcome.Text = $"Добро пожаловать! Ваши заявки на ремонт"; // Устанавливаем приветствие } // Обработчик двойного клика по строке таблицы private void dataGridViewRequests_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0) // Проверяем, что кликнули по строке с данными { RepairRequest selectedRequest = userRequests[e.RowIndex]; // Получаем выбранную заявку // Показываем детали заявки MessageBox.Show($"Детали заявки #{selectedRequest.Id}\n\n" + $"Устройство: {selectedRequest.DeviceType}\n" + $"Бренд: {selectedRequest.Brand}\n" + $"Модель: {selectedRequest.Model}\n" + $"Проблема: {selectedRequest.ProblemDescription}\n" + $"Статус: {selectedRequest.Status}\n" + $"Дата создания: {selectedRequest.CreatedDate:dd.MM.yyyy HH:mm}", "Детали заявки", MessageBoxButtons.OK, MessageBoxIcon.Information); } } // Обработчик изменения выделения в таблице private void dataGridViewRequests_SelectionChanged_1(object sender, EventArgs e) { if (dataGridViewRequests.SelectedRows.Count > 0) // Если есть выделенные строки { int selectedIndex = dataGridViewRequests.SelectedRows[0].Index; // Получаем индекс выделенной строки if (selectedIndex < userRequests.Count) // Проверяем границы массива { RepairRequest selected = userRequests[selectedIndex]; // Получаем выбранную заявку lblSelectedInfo.Text = $"Выбрано: {selected.DeviceType} - {selected.Status}"; // Обновляем информацию } } } private void dataGridViewRequests_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0) // Проверяем, что кликнули по строке с данными { RepairRequest selectedRequest = userRequests[e.RowIndex]; // Получаем выбранную заявку // Показываем детали заявки MessageBox.Show($"Детали заявки #{selectedRequest.Id}\n\n" + $"Устройство: {selectedRequest.DeviceType}\n" + $"Бренд: {selectedRequest.Brand}\n" + $"Модель: {selectedRequest.Model}\n" + $"Проблема: {selectedRequest.ProblemDescription}\n" + $"Статус: {selectedRequest.Status}\n" + $"Дата создания: {selectedRequest.CreatedDate:dd.MM.yyyy HH:mm}", "Детали заявки", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } }