Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System; // Базові системні функції
- using System.Data; // Робота з таблицями та даними
- using System.Drawing; // Робота з кольорами та графікою
- using System.Windows.Forms; // Бібліотека для створення вікон
- using MySql.Data.MySqlClient; // Драйвер для MySQL
- namespace lab8
- {
- public partial class CoursesEdit : Form // Клас форми для додавання або редагування курсу
- {
- string connectionString = "server=localhost;database=lab;uid=root;pwd=;"; // Рядок підключення до БД
- int currentCourseId = -1; // Змінна для ID курсу (-1 означає, що ми додаємо новий)
- public CoursesEdit(int id) // Конструктор форми, куди ми передаємо ID курсу
- {
- InitializeComponent(); // Ініціалізація компонентів форми
- currentCourseId = id; // Збереження переданого ID у внутрішню змінну
- }
- private void CoursesEdit_Load(object sender, EventArgs e) // Подія при завантаженні вікна
- {
- LoadLists(); // Завантаження списків менторів та категорій у ComboBox
- if (currentCourseId == -1) // Якщо ID дорівнює -1 (режим додавання)
- {
- this.Text = "Додавання курсу"; // Міняємо заголовок вікна
- Save.Text = " Додати"; // Міняємо текст на кнопці
- Date.Text = "Сформується автоматично"; // Текст для дати створення
- Date.ForeColor = Color.Gray; // Робимо текст дати сірим
- }
- else // Якщо ID існує (режим редагування)
- {
- this.Text = "Редагування курсу (ID: " + currentCourseId + ")"; // Показуємо ID у заголовку
- LoadCourseData(); // Завантажуємо існуючі дані курсу з бази
- }
- }
- private void LoadLists() // Метод для заповнення списків менторів та категорій
- {
- try // Початок блоку обробки помилок
- {
- MySqlConnection conn = new MySqlConnection(connectionString); // Створення з'єднання
- conn.Open(); // Відкриття підключення
- string mentorQuery = "SELECT mentors.id, users.full_name FROM mentors JOIN users ON mentors.user_id = users.id"; // Запит на отримання імен менторів
- MySqlDataAdapter daMentor = new MySqlDataAdapter(mentorQuery, conn); // Адаптер для менторів
- DataTable dtMentor = new DataTable(); // Таблиця в пам'яті для менторів
- daMentor.Fill(dtMentor); // Заповнення таблиці
- Mentor_Input.DataSource = dtMentor; // Прив'язка даних до випадаючого списку
- Mentor_Input.DisplayMember = "full_name"; // Що бачить користувач (ім'я)
- Mentor_Input.ValueMember = "id"; // Що програма використовує як значення (ID)
- string catQuery = "SELECT id, name FROM categories"; // Запит на отримання категорій
- MySqlDataAdapter daCat = new MySqlDataAdapter(catQuery, conn); // Адаптер для категорій
- DataTable dtCat = new DataTable(); // Таблиця в пам'яті для категорій
- daCat.Fill(dtCat); // Заповнення таблиці
- Category_Input.DataSource = dtCat; // Прив'язка даних до списку категорій
- Category_Input.DisplayMember = "name"; // Відображення назви категорії
- Category_Input.ValueMember = "id"; // Значення ID категорії
- conn.Close(); // Закриття підключення
- }
- catch (Exception ex) // Якщо виникла помилка
- {
- MessageBox.Show(ex.Message); // Показ вікна з помилкою
- }
- }
- private void LoadCourseData() // Метод завантаження даних конкретного курсу для редагування
- {
- MySqlConnection conn = new MySqlConnection(connectionString); // З'єднання з БД
- conn.Open(); // Відкриття з'єднання
- string query = "SELECT * FROM courses WHERE id = @id"; // SQL-запит для пошуку курсу за ID
- MySqlCommand cmd = new MySqlCommand(query, conn); // Створення команди
- cmd.Parameters.AddWithValue("@id", currentCourseId); // Передача параметра ID
- MySqlDataReader dr = cmd.ExecuteReader(); // Запуск читання даних
- if (dr.Read()) // Якщо запис знайдено
- {
- Course_Input.Text = dr["title"].ToString(); // Вивід назви курсу в TextBox
- Mentor_Input.SelectedValue = dr["mentor_id"]; // Вибір ментора у списку за його ID
- Category_Input.SelectedValue = dr["category_id"]; // Вибір категорії за її ID
- Price.Value = Convert.ToDecimal(dr["price"]); // Встановлення ціни в NumericUpDown
- Duration.Value = Convert.ToDecimal(dr["duration_minutes"]); // Встановлення тривалості
- if (dr["rating"] == DBNull.Value) // Перевірка, чи рейтинг не порожній у базі
- {
- Rating.Value = 0; // Якщо NULL, ставимо 0
- }
- else
- {
- Rating.Value = Convert.ToDecimal(dr["rating"]); // Якщо є, встановлюємо значення
- }
- if (dr["preview_link"] == DBNull.Value) // Перевірка на NULL для посилання
- {
- Preview.Text = ""; // Якщо порожньо, лишаємо пустий рядок
- }
- else
- {
- Preview.Text = dr["preview_link"].ToString(); // Виводимо посилання
- }
- Date.Text = dr["creation_date"].ToString(); // Вивід дати створення курсу
- if (Convert.ToBoolean(dr["is_active"])) // Якщо курс активний
- {
- Active.Checked = true; // Ставимо галочку на "Активний"
- Inactive.Checked = false; // Знімаємо з "Неактивний"
- }
- else
- {
- Active.Checked = false; // Знімаємо з "Активний"
- Inactive.Checked = true; // Ставимо на "Неактивний"
- }
- }
- dr.Close(); // Закриття читця даних
- conn.Close(); // Закриття з'єднання
- }
- private void Save_Click(object sender, EventArgs e) // Натискання кнопки збереження (Додати/Зберегти)
- {
- if (Course_Input.Text == "") // Перевірка, чи не забули ввести назву
- {
- MessageBox.Show("Введіть назву курсу."); // Попередження
- return; // Зупинка збереження
- }
- string url = Preview.Text.Trim(); // Отримання посилання без зайвих пробілів
- if (url != "" && !url.StartsWith("http")) // Перевірка формату посилання
- {
- MessageBox.Show("Будь ласка, введіть коректне посилання"); // Попередження
- Preview.Focus(); // Перенесення фокусу на поле посилання
- return; // Зупинка збереження
- }
- try // Спроба виконати збереження в БД
- {
- MySqlConnection conn = new MySqlConnection(connectionString); // Створення з'єднання
- conn.Open(); // Відкриття каналу зв'язку
- string query = ""; // Змінна для тексту SQL-запиту
- if (currentCourseId == -1) // Якщо ми додаємо новий курс
- {
- query = "INSERT INTO courses (title, mentor_id, category_id, price, duration_minutes, rating, preview_link, is_active) " +
- "VALUES (@title, @mentor, @cat, @price, @dur, @rat, @prev, @active)"; // Запит на вставку
- }
- else // Якщо ми редагуємо існуючий
- {
- query = "UPDATE courses SET title=@title, mentor_id=@mentor, category_id=@cat, price=@price, " +
- "duration_minutes=@dur, rating=@rat, preview_link=@prev, is_active=@active WHERE id=@id"; // Запит на оновлення
- }
- MySqlCommand cmd = new MySqlCommand(query, conn); // Створення команди запиту
- cmd.Parameters.AddWithValue("@title", Course_Input.Text); // Передача назви
- cmd.Parameters.AddWithValue("@mentor", Mentor_Input.SelectedValue); // Передача ID ментора
- cmd.Parameters.AddWithValue("@cat", Category_Input.SelectedValue); // Передача ID категорії
- cmd.Parameters.AddWithValue("@price", Price.Value); // Передача ціни
- cmd.Parameters.AddWithValue("@dur", Duration.Value); // Передача тривалості
- if (Rating.Value == 0) // Якщо рейтинг 0, записуємо в базу як NULL
- {
- cmd.Parameters.AddWithValue("@rat", DBNull.Value); // Запис NULL
- }
- else
- {
- cmd.Parameters.AddWithValue("@rat", Rating.Value); // Запис значення рейтингу
- }
- if (Preview.Text == "") // Якщо посилання не введено
- {
- cmd.Parameters.AddWithValue("@prev", DBNull.Value); // Запис NULL
- }
- else
- {
- cmd.Parameters.AddWithValue("@prev", Preview.Text); // Запис посилання
- }
- if (Active.Checked == true) // Перевірка стану радіокнопки "Активний"
- {
- cmd.Parameters.AddWithValue("@active", 1); // 1 - активний (true)
- }
- else
- {
- cmd.Parameters.AddWithValue("@active", 0); // 0 - неактивний (false)
- }
- if (currentCourseId != -1) // Якщо це редагування, передаємо ID курсу для WHERE
- {
- cmd.Parameters.AddWithValue("@id", currentCourseId); // Параметр ID для умови UPDATE
- }
- cmd.ExecuteNonQuery(); // Виконання команди в БД
- conn.Close(); // Закриття з'єднання
- this.DialogResult = DialogResult.OK; // Встановлюємо результат "ОК" для викличної форми
- this.Close(); // Закриваємо форму
- }
- catch (Exception ex) // Обробка помилок бази даних
- {
- MessageBox.Show(ex.Message); // Повідомлення про помилку
- }
- }
- private void Exit_Click(object sender, EventArgs e) // Кнопка скасування/виходу
- {
- this.Close(); // Закриваємо форму без змін
- }
- private void OnlyLatin(object sender, KeyPressEventArgs e) // Обробка введення символів (наприклад, для URL)
- {
- if (e.KeyChar > 127 || e.KeyChar == ' ') // Якщо символ не латинський або це пробіл
- {
- e.Handled = true; // Забороняємо введення цього символу
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment