Lavig

CoursesEdit

Apr 13th, 2026
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 13.27 KB | None | 0 0
  1. using System; // Базові системні функції
  2. using System.Data; // Робота з таблицями та даними
  3. using System.Drawing; // Робота з кольорами та графікою
  4. using System.Windows.Forms; // Бібліотека для створення вікон
  5. using MySql.Data.MySqlClient; // Драйвер для MySQL
  6.  
  7. namespace lab8
  8. {
  9.     public partial class CoursesEdit : Form // Клас форми для додавання або редагування курсу
  10.     {
  11.         string connectionString = "server=localhost;database=lab;uid=root;pwd=;"; // Рядок підключення до БД
  12.         int currentCourseId = -1; // Змінна для ID курсу (-1 означає, що ми додаємо новий)
  13.  
  14.         public CoursesEdit(int id) // Конструктор форми, куди ми передаємо ID курсу
  15.         {
  16.             InitializeComponent(); // Ініціалізація компонентів форми
  17.             currentCourseId = id; // Збереження переданого ID у внутрішню змінну
  18.         }
  19.  
  20.         private void CoursesEdit_Load(object sender, EventArgs e) // Подія при завантаженні вікна
  21.         {
  22.             LoadLists(); // Завантаження списків менторів та категорій у ComboBox
  23.  
  24.             if (currentCourseId == -1) // Якщо ID дорівнює -1 (режим додавання)
  25.             {
  26.                 this.Text = "Додавання курсу"; // Міняємо заголовок вікна
  27.                 Save.Text = " Додати"; // Міняємо текст на кнопці
  28.                 Date.Text = "Сформується автоматично"; // Текст для дати створення
  29.                 Date.ForeColor = Color.Gray; // Робимо текст дати сірим
  30.             }
  31.             else // Якщо ID існує (режим редагування)
  32.             {
  33.                 this.Text = "Редагування курсу (ID: " + currentCourseId + ")"; // Показуємо ID у заголовку
  34.                 LoadCourseData(); // Завантажуємо існуючі дані курсу з бази
  35.             }
  36.         }
  37.  
  38.         private void LoadLists() // Метод для заповнення списків менторів та категорій
  39.         {
  40.             try // Початок блоку обробки помилок
  41.             {
  42.                 MySqlConnection conn = new MySqlConnection(connectionString); // Створення з'єднання
  43.                 conn.Open(); // Відкриття підключення
  44.  
  45.                 string mentorQuery = "SELECT mentors.id, users.full_name FROM mentors JOIN users ON mentors.user_id = users.id"; // Запит на отримання імен менторів
  46.                 MySqlDataAdapter daMentor = new MySqlDataAdapter(mentorQuery, conn); // Адаптер для менторів
  47.                 DataTable dtMentor = new DataTable(); // Таблиця в пам'яті для менторів
  48.                 daMentor.Fill(dtMentor); // Заповнення таблиці
  49.  
  50.                 Mentor_Input.DataSource = dtMentor; // Прив'язка даних до випадаючого списку
  51.                 Mentor_Input.DisplayMember = "full_name"; // Що бачить користувач (ім'я)
  52.                 Mentor_Input.ValueMember = "id"; // Що програма використовує як значення (ID)
  53.  
  54.                 string catQuery = "SELECT id, name FROM categories"; // Запит на отримання категорій
  55.                 MySqlDataAdapter daCat = new MySqlDataAdapter(catQuery, conn); // Адаптер для категорій
  56.                 DataTable dtCat = new DataTable(); // Таблиця в пам'яті для категорій
  57.                 daCat.Fill(dtCat); // Заповнення таблиці
  58.  
  59.                 Category_Input.DataSource = dtCat; // Прив'язка даних до списку категорій
  60.                 Category_Input.DisplayMember = "name"; // Відображення назви категорії
  61.                 Category_Input.ValueMember = "id"; // Значення ID категорії
  62.  
  63.                 conn.Close(); // Закриття підключення
  64.             }
  65.             catch (Exception ex) // Якщо виникла помилка
  66.             {
  67.                 MessageBox.Show(ex.Message); // Показ вікна з помилкою
  68.             }
  69.         }
  70.  
  71.         private void LoadCourseData() // Метод завантаження даних конкретного курсу для редагування
  72.         {
  73.             MySqlConnection conn = new MySqlConnection(connectionString); // З'єднання з БД
  74.             conn.Open(); // Відкриття з'єднання
  75.  
  76.             string query = "SELECT * FROM courses WHERE id = @id"; // SQL-запит для пошуку курсу за ID
  77.             MySqlCommand cmd = new MySqlCommand(query, conn); // Створення команди
  78.             cmd.Parameters.AddWithValue("@id", currentCourseId); // Передача параметра ID
  79.  
  80.             MySqlDataReader dr = cmd.ExecuteReader(); // Запуск читання даних
  81.  
  82.             if (dr.Read()) // Якщо запис знайдено
  83.             {
  84.                 Course_Input.Text = dr["title"].ToString(); // Вивід назви курсу в TextBox
  85.                 Mentor_Input.SelectedValue = dr["mentor_id"]; // Вибір ментора у списку за його ID
  86.                 Category_Input.SelectedValue = dr["category_id"]; // Вибір категорії за її ID
  87.                 Price.Value = Convert.ToDecimal(dr["price"]); // Встановлення ціни в NumericUpDown
  88.                 Duration.Value = Convert.ToDecimal(dr["duration_minutes"]); // Встановлення тривалості
  89.  
  90.                 if (dr["rating"] == DBNull.Value) // Перевірка, чи рейтинг не порожній у базі
  91.                 {
  92.                     Rating.Value = 0; // Якщо NULL, ставимо 0
  93.                 }
  94.                 else
  95.                 {
  96.                     Rating.Value = Convert.ToDecimal(dr["rating"]); // Якщо є, встановлюємо значення
  97.                 }
  98.  
  99.                 if (dr["preview_link"] == DBNull.Value) // Перевірка на NULL для посилання
  100.                 {
  101.                     Preview.Text = ""; // Якщо порожньо, лишаємо пустий рядок
  102.                 }
  103.                 else
  104.                 {
  105.                     Preview.Text = dr["preview_link"].ToString(); // Виводимо посилання
  106.                 }
  107.  
  108.                 Date.Text = dr["creation_date"].ToString(); // Вивід дати створення курсу
  109.  
  110.                 if (Convert.ToBoolean(dr["is_active"])) // Якщо курс активний
  111.                 {
  112.                     Active.Checked = true; // Ставимо галочку на "Активний"
  113.                     Inactive.Checked = false; // Знімаємо з "Неактивний"
  114.                 }
  115.                 else
  116.                 {
  117.                     Active.Checked = false; // Знімаємо з "Активний"
  118.                     Inactive.Checked = true; // Ставимо на "Неактивний"
  119.                 }
  120.             }
  121.  
  122.             dr.Close(); // Закриття читця даних
  123.             conn.Close(); // Закриття з'єднання
  124.         }
  125.  
  126.         private void Save_Click(object sender, EventArgs e) // Натискання кнопки збереження (Додати/Зберегти)
  127.         {
  128.             if (Course_Input.Text == "") // Перевірка, чи не забули ввести назву
  129.             {
  130.                 MessageBox.Show("Введіть назву курсу."); // Попередження
  131.                 return; // Зупинка збереження
  132.             }
  133.  
  134.             string url = Preview.Text.Trim(); // Отримання посилання без зайвих пробілів
  135.             if (url != "" && !url.StartsWith("http")) // Перевірка формату посилання
  136.             {
  137.                 MessageBox.Show("Будь ласка, введіть коректне посилання"); // Попередження
  138.                 Preview.Focus(); // Перенесення фокусу на поле посилання
  139.                 return; // Зупинка збереження
  140.             }
  141.  
  142.             try // Спроба виконати збереження в БД
  143.             {
  144.                 MySqlConnection conn = new MySqlConnection(connectionString); // Створення з'єднання
  145.                 conn.Open(); // Відкриття каналу зв'язку
  146.  
  147.                 string query = ""; // Змінна для тексту SQL-запиту
  148.                 if (currentCourseId == -1) // Якщо ми додаємо новий курс
  149.                 {
  150.                     query = "INSERT INTO courses (title, mentor_id, category_id, price, duration_minutes, rating, preview_link, is_active) " +
  151.                             "VALUES (@title, @mentor, @cat, @price, @dur, @rat, @prev, @active)"; // Запит на вставку
  152.                 }
  153.                 else // Якщо ми редагуємо існуючий
  154.                 {
  155.                     query = "UPDATE courses SET title=@title, mentor_id=@mentor, category_id=@cat, price=@price, " +
  156.                             "duration_minutes=@dur, rating=@rat, preview_link=@prev, is_active=@active WHERE id=@id"; // Запит на оновлення
  157.                 }
  158.  
  159.                 MySqlCommand cmd = new MySqlCommand(query, conn); // Створення команди запиту
  160.                 cmd.Parameters.AddWithValue("@title", Course_Input.Text); // Передача назви
  161.                 cmd.Parameters.AddWithValue("@mentor", Mentor_Input.SelectedValue); // Передача ID ментора
  162.                 cmd.Parameters.AddWithValue("@cat", Category_Input.SelectedValue); // Передача ID категорії
  163.                 cmd.Parameters.AddWithValue("@price", Price.Value); // Передача ціни
  164.                 cmd.Parameters.AddWithValue("@dur", Duration.Value); // Передача тривалості
  165.  
  166.                 if (Rating.Value == 0) // Якщо рейтинг 0, записуємо в базу як NULL
  167.                 {
  168.                     cmd.Parameters.AddWithValue("@rat", DBNull.Value); // Запис NULL
  169.                 }
  170.                 else
  171.                 {
  172.                     cmd.Parameters.AddWithValue("@rat", Rating.Value); // Запис значення рейтингу
  173.                 }
  174.  
  175.                 if (Preview.Text == "") // Якщо посилання не введено
  176.                 {
  177.                     cmd.Parameters.AddWithValue("@prev", DBNull.Value); // Запис NULL
  178.                 }
  179.                 else
  180.                 {
  181.                     cmd.Parameters.AddWithValue("@prev", Preview.Text); // Запис посилання
  182.                 }
  183.  
  184.                 if (Active.Checked == true) // Перевірка стану радіокнопки "Активний"
  185.                 {
  186.                     cmd.Parameters.AddWithValue("@active", 1); // 1 - активний (true)
  187.                 }
  188.                 else
  189.                 {
  190.                     cmd.Parameters.AddWithValue("@active", 0); // 0 - неактивний (false)
  191.                 }
  192.  
  193.                 if (currentCourseId != -1) // Якщо це редагування, передаємо ID курсу для WHERE
  194.                 {
  195.                     cmd.Parameters.AddWithValue("@id", currentCourseId); // Параметр ID для умови UPDATE
  196.                 }
  197.  
  198.                 cmd.ExecuteNonQuery(); // Виконання команди в БД
  199.                 conn.Close(); // Закриття з'єднання
  200.  
  201.                 this.DialogResult = DialogResult.OK; // Встановлюємо результат "ОК" для викличної форми
  202.                 this.Close(); // Закриваємо форму
  203.             }
  204.             catch (Exception ex) // Обробка помилок бази даних
  205.             {
  206.                 MessageBox.Show(ex.Message); // Повідомлення про помилку
  207.             }
  208.         }
  209.  
  210.         private void Exit_Click(object sender, EventArgs e) // Кнопка скасування/виходу
  211.         {
  212.             this.Close(); // Закриваємо форму без змін
  213.         }
  214.  
  215.         private void OnlyLatin(object sender, KeyPressEventArgs e) // Обробка введення символів (наприклад, для URL)
  216.         {
  217.             if (e.KeyChar > 127 || e.KeyChar == ' ') // Якщо символ не латинський або це пробіл
  218.             {
  219.                 e.Handled = true; // Забороняємо введення цього символу
  220.             }
  221.         }
  222.     }
  223. }
Advertisement
Add Comment
Please, Sign In to add comment