185 lines
7.0 KiB
C#
185 lines
7.0 KiB
C#
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);
|
||
}
|
||
}
|
||
}
|