Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System; // Підключення основних системних функцій
- using System.Data; // Робота з таблицями даних у пам'яті
- using System.Windows.Forms; // Бібліотека для створення віконного інтерфейсу
- using MySql.Data.MySqlClient; // Драйвер для роботи з базою даних MySQL
- namespace lab8 // Простір імен проекту
- {
- public partial class EnrollmentsView : Form // Клас форми для перегляду списку зарахувань
- {
- string connectionString = "server=localhost;database=lab;uid=root;pwd=;"; // Рядок підключення до БД
- int selectedEnrollmentId = -1; // Змінна для збереження ID вибраного запису
- bool isSelectionProcessing = false; // Прапорець для запобігання конфліктів при виборі рядка
- public EnrollmentsView() // Конструктор форми
- {
- InitializeComponent(); // Ініціалізація графічних компонентів
- Table.Sorted += Table_Sorted; // Прив'язка події сортування таблиці
- }
- private void EnrollmentsView_Load(object sender, EventArgs e) // Метод при завантаженні вікна
- {
- LoadData(); // Завантаження даних із бази
- if (Table.Rows.Count > 0) // Якщо дані є
- {
- SelectRow(0); // Виділяємо перший рядок
- }
- }
- private void Table_Sorted(object sender, EventArgs e) // Спрацьовує після завершення сортування
- {
- if (Table.Rows.Count > 0) // Якщо в таблиці залишилися записи
- {
- SelectRow(0); // Повертаємо виділення на перший рядок
- }
- }
- private void LoadData() // Метод для отримання даних з БД
- {
- try // Початок блоку відлову помилок
- {
- MySqlConnection conn = new MySqlConnection(connectionString); // Створення з'єднання
- conn.Open(); // Відкриття з'єднання
- string query = "SELECT enrollments.id, users.full_name, courses.title, " +
- "enrollments.enrollment_date, enrollments.user_id, enrollments.course_id " +
- "FROM enrollments " +
- "JOIN users ON enrollments.user_id = users.id " +
- "JOIN courses ON enrollments.course_id = courses.id " +
- "ORDER BY enrollments.id ASC"; // SQL-запит на отримання записів з іменами студентів та назвами курсів
- MySqlDataAdapter adapter = new MySqlDataAdapter(query, conn); // Створення адаптера
- DataTable dt = new DataTable(); // Тимчасова таблиця в пам'яті
- adapter.Fill(dt); // Заповнення таблиці даними
- Table.DataSource = dt; // Відображення даних у сітці на формі
- Table.Columns["user_id"].Visible = false; // Приховування технічної колонки ID користувача
- Table.Columns["course_id"].Visible = false; // Приховування технічної колонки ID курсу
- conn.Close(); // Закриття підключення до бази
- }
- catch (Exception ex) // У разі виникнення помилки
- {
- MessageBox.Show(ex.Message); // Виведення повідомлення про помилку
- }
- }
- void SelectRow(int i) // Метод для програмного виділення рядка
- {
- if (i < 0) // Перевірка на від'ємний індекс
- {
- return; // Вихід
- }
- if (i >= Table.Rows.Count) // Перевірка на перевищення кількості рядків
- {
- return; // Вихід
- }
- isSelectionProcessing = true; // Блокування зайвих спрацювань
- Table.ClearSelection(); // Зняття попередніх виділень
- Table.Rows[i].Selected = true; // Виділення рядка за індексом i
- if (Table.Rows[i].Cells["id"].Value != DBNull.Value) // Перевірка наявності значення ID
- {
- selectedEnrollmentId = Convert.ToInt32(Table.Rows[i].Cells["id"].Value); // Збереження ID запису
- }
- isSelectionProcessing = false; // Зняття блокування
- Delete.Enabled = true; // Активація кнопки видалення
- }
- private void Table_CellClick(object sender, DataGridViewCellEventArgs e) // Подія кліку по таблиці
- {
- if (e.RowIndex >= 0) // Якщо клікнули не по заголовку
- {
- SelectRow(e.RowIndex); // Виділяємо вибраний рядок
- }
- }
- private void Add_Click(object sender, EventArgs e) // Кнопка додавання нового запису
- {
- EnrollmentsAdd addForm = new EnrollmentsAdd(); // Створення форми додавання
- DialogResult result = addForm.ShowDialog(); // Відкриття форми модально
- if (result == DialogResult.OK) // Якщо запис успішно додано
- {
- LoadData(); // Оновлення таблиці
- if (Table.Rows.Count > 0) // Якщо таблиця не порожня
- {
- SelectRow(0); // Виділяємо перший рядок
- }
- }
- }
- private void Delete_Click(object sender, EventArgs e) // Кнопка видалення запису
- {
- if (Table.SelectedRows.Count == 0) // Якщо нічого не вибрано
- {
- return; // Вихід
- }
- string student = Table.SelectedRows[0].Cells["full_name"].Value.ToString(); // Отримання імені студента
- string course = Table.SelectedRows[0].Cells["title"].Value.ToString(); // Отримання назви курсу
- DialogResult confirm = MessageBox.Show("Видалити запис студента " + student + " на курс " + course + "?", "Видалення", MessageBoxButtons.YesNo); // Підтвердження
- if (confirm == DialogResult.Yes) // Якщо користувач згоден
- {
- MySqlConnection conn = new MySqlConnection(connectionString); // Створення з'єднання
- conn.Open(); // Відкриття з'єднання
- MySqlCommand cmd = new MySqlCommand("DELETE FROM enrollments WHERE id=@id", conn); // Команда видалення
- cmd.Parameters.AddWithValue("@id", selectedEnrollmentId); // Передача параметра ID
- cmd.ExecuteNonQuery(); // Виконання видалення
- conn.Close(); // Закриття з'єднання
- LoadData(); // Оновлення списку
- if (Table.Rows.Count > 0) // Якщо дані залишилися
- {
- SelectRow(0); // Виділяємо новий перший рядок
- }
- else // Якщо видалили останній запис
- {
- Input.Clear(); // Очищення пошуку
- selectedEnrollmentId = -1; // Скидання ID
- Delete.Enabled = false; // Вимкнення кнопки видалення
- }
- }
- }
- private void Input_TextChanged(object sender, EventArgs e) // Подія зміни тексту в полі пошуку
- {
- if (isSelectionProcessing == true) // Якщо зміна відбулася під час вибору рядка
- {
- return; // Нічого не робимо
- }
- DataTable dt = (DataTable)Table.DataSource; // Отримання джерела даних
- if (dt != null) // Якщо таблиця не порожня
- {
- string text = Input.Text.Replace("'", "''"); // Захист від помилок у SQL-фільтрі
- string filter = "full_name LIKE '%" + text + "%' OR title LIKE '%" + text + "%'"; // Умова пошуку за ім'ям або курсом
- dt.DefaultView.RowFilter = filter; // Застосування фільтрації до таблиці
- }
- if (Table.Rows.Count > 0) // Якщо після пошуку знайдено рядки
- {
- SelectRow(0); // Виділяємо перший знайдений результат
- }
- else // Якщо нічого не знайдено
- {
- selectedEnrollmentId = -1; // Скидання вибору
- Delete.Enabled = false; // Вимкнення кнопки видалення
- }
- }
- private void Exit_Click(object sender, EventArgs e) // Кнопка виходу
- {
- this.Close(); // Закриття поточної форми
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment