using MySql.Data.MySqlClient; using NeshinaPolina07_11; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.Remoting.Metadata; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Neshina13 { public partial class Form2 : Form { public Form2() { InitializeComponent(); LoadSchedule(); // Заполняем ComboBox вариантами сортировки comboBoxSort.Items.Clear(); comboBoxSort.Items.Add("По дате (новые сверху)"); comboBoxSort.Items.Add("По дате (старые сверху)"); comboBoxSort.Items.Add("По алфавиту (предмет)"); comboBoxSort.SelectedIndex = 0; // По умолчанию — новые сверху } public class SortOption { public string DisplayName { get; } public string OrderByColumn { get; } public SortOption(string displayName, string orderByColumn) { DisplayName = displayName; OrderByColumn = orderByColumn; } } private void LoadSchedule(string orderByClause = "s.Schedule_Date DESC") { string query = $@" SELECT s.Schedule_Id, subj.StudySubject_name AS Предмет, g.GroupNum AS Группа, t.Teacher_LastName AS Преподаватель, m.Manager_LastName AS Ответственный, s.Schedule_Date AS Дата FROM Schedule s JOIN StudySubjects subj ON s.Schedule_StudySubject_Id = subj.StudySubject_Id JOIN `Group` g ON s.Schedule_Group_Id = g.Group_Id JOIN Teacher t ON s.Schedule_Teacher_Id = t.Teacher_Id JOIN Mangers m ON s.Schedule_ResponsiblMmanager = m.Manger_Id ORDER BY {orderByClause}"; try { var conn = DB.GetInstance().GetConnection(); using (var adapter = new MySqlDataAdapter(query, conn)) { var table = new DataTable(); adapter.Fill(table); dataGridView1.DataSource = table; // Скрыть ID, если нужно if (dataGridView1.Columns.Contains("Schedule_Id")) dataGridView1.Columns["Schedule_Id"].Visible = false; } } catch (Exception ex) { MessageBox.Show("Ошибка загрузки расписания: " + ex.Message); } } private void button1_Click(object sender, EventArgs e) { var addForm = new Add(); if (addForm.ShowDialog() == DialogResult.OK) { // Обновляем таблицу только если запись успешно добавлена LoadSchedule(); } } private void button4_Click(object sender, EventArgs e) { Form1 form1 = new Form1(); form1.Show(); this.Hide(); } private void button2_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count == 0) { MessageBox.Show("Выберите строку для редактирования."); return; } // Получаем ID из первой колонки (предполагается, что Schedule_Id — первый столбец) var selectedRow = dataGridView1.SelectedRows[0]; int scheduleId = Convert.ToInt32(selectedRow.Cells[0].Value); // если Schedule_Id — 0-й столбец var editForm = new Edit(scheduleId); if (editForm.ShowDialog() == DialogResult.OK) { LoadSchedule(); // Обновляем таблицу после успешного редактирования } } private void button3_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count == 0) { MessageBox.Show("Пожалуйста, выберите строку для удаления.", "Удаление", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } var selectedRow = dataGridView1.SelectedRows[0]; if (!int.TryParse(selectedRow.Cells[0].Value?.ToString(), out int scheduleId)) { MessageBox.Show("Не удалось определить ID записи."); return; } var confirmResult = MessageBox.Show( "Вы уверены, что хотите удалить эту запись?", "Подтверждение удаления", MessageBoxButtons.YesNo, MessageBoxIcon.Question ); if (confirmResult != DialogResult.Yes) return; try { var conn = DB.GetInstance().GetConnection(); string deleteQuery = "DELETE FROM Schedule WHERE Schedule_Id = @id"; using (var cmd = new MySqlCommand(deleteQuery, conn)) { cmd.Parameters.AddWithValue("@id", scheduleId); int rowsAffected = cmd.ExecuteNonQuery(); if (rowsAffected > 0) { MessageBox.Show("Запись успешно удалена.", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); LoadSchedule(); // Обновляем таблицу } else { MessageBox.Show("Запись не найдена или уже удалена.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } catch (Exception ex) { MessageBox.Show("Ошибка при удалении записи: " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void comboBoxSort_SelectedIndexChanged(object sender, EventArgs e) { string orderBy = "s.Schedule_Date DESC"; switch (comboBoxSort.SelectedItem?.ToString()) { case "По дате (новые сверху)": orderBy = "s.Schedule_Date DESC"; break; case "По дате (старые сверху)": orderBy = "s.Schedule_Date ASC"; break; case "По алфавиту (предмет)": orderBy = "subj.StudySubject_name ASC"; break; } LoadSchedule(orderBy); } } }