146 lines
5.6 KiB
C#
146 lines
5.6 KiB
C#
using System;
|
||
using System.Data;
|
||
using System.Windows.Forms;
|
||
using System.Xml.Linq;
|
||
using MySql.Data.MySqlClient;
|
||
|
||
namespace _0303RogovaNeshina
|
||
{
|
||
public partial class EditBooksForm : Form
|
||
{
|
||
string connStr = "Server=cfif31.ru;Port=3306;Database=ISPr25-21_NeshinaPV_0303;Uid=ISPr25-21_NeshinaPV;Pwd=ISPr25-21_NeshinaPV;";
|
||
private int bookId; // ID книги, которую редактируем
|
||
|
||
// Конструктор принимает ID книги
|
||
public EditBooksForm(int id)
|
||
{
|
||
InitializeComponent();
|
||
this.bookId = id;
|
||
LoadAuthors(); // Загружаем список авторов
|
||
LoadBookData(); // Загружаем данные конкретной книги
|
||
}
|
||
|
||
// Загрузка авторов в ComboBox (так же, как в AddForm)
|
||
private void LoadAuthors()
|
||
{
|
||
try
|
||
{
|
||
using (MySqlConnection conn = new MySqlConnection(connStr))
|
||
{
|
||
conn.Open();
|
||
string sql = "SELECT idauthor, name FROM author ORDER BY name";
|
||
|
||
MySqlCommand cmd = new MySqlCommand(sql, conn);
|
||
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
|
||
DataTable dt = new DataTable();
|
||
da.Fill(dt);
|
||
|
||
cbAuthor.DataSource = dt;
|
||
cbAuthor.DisplayMember = "name";
|
||
cbAuthor.ValueMember = "idauthor";
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show("Ошибка загрузки авторов: " + ex.Message);
|
||
}
|
||
}
|
||
|
||
// Загрузка данных книги в поля формы
|
||
private void LoadBookData()
|
||
{
|
||
try
|
||
{
|
||
using (MySqlConnection conn = new MySqlConnection(connStr))
|
||
{
|
||
conn.Open();
|
||
string sql = "SELECT name, author_id, price FROM books WHERE idbooks = @id";
|
||
|
||
MySqlCommand cmd = new MySqlCommand(sql, conn);
|
||
cmd.Parameters.AddWithValue("@id", bookId);
|
||
|
||
MySqlDataReader reader = cmd.ExecuteReader();
|
||
|
||
if (reader.Read())
|
||
{
|
||
tbName.Text = reader["name"].ToString();
|
||
cbAuthor.SelectedValue = reader["author_id"]; // Выбираем нужного автора
|
||
tbPrice.Text = reader["price"].ToString();
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("Книга не найдена!");
|
||
this.Close();
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show("Ошибка загрузки данных книги: " + ex.Message);
|
||
}
|
||
}
|
||
|
||
private void btnSave_Click(object sender, EventArgs e)
|
||
{
|
||
// Проверки (как в AddForm)
|
||
if (string.IsNullOrWhiteSpace(tbName.Text))
|
||
{
|
||
MessageBox.Show("Введите название книги!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||
return;
|
||
}
|
||
|
||
if (cbAuthor.SelectedValue == null)
|
||
{
|
||
MessageBox.Show("Выберите автора!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||
return;
|
||
}
|
||
|
||
decimal price;
|
||
if (!decimal.TryParse(tbPrice.Text, out price) || price <= 0)
|
||
{
|
||
MessageBox.Show("Введите корректную цену!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||
return;
|
||
}
|
||
|
||
try
|
||
{
|
||
using (MySqlConnection conn = new MySqlConnection(connStr))
|
||
{
|
||
conn.Open();
|
||
|
||
// UPDATE запрос вместо INSERT
|
||
string sql = "UPDATE books SET name = @name, author_id = @author_id, price = @price WHERE idbooks = @id";
|
||
MySqlCommand cmd = new MySqlCommand(sql, conn);
|
||
|
||
cmd.Parameters.AddWithValue("@name", tbName.Text.Trim());
|
||
cmd.Parameters.AddWithValue("@author_id", cbAuthor.SelectedValue);
|
||
cmd.Parameters.AddWithValue("@price", price);
|
||
cmd.Parameters.AddWithValue("@id", bookId); // Важно: обновляем именно эту книгу
|
||
|
||
int rows = cmd.ExecuteNonQuery();
|
||
|
||
if (rows > 0)
|
||
{
|
||
MessageBox.Show("Данные успешно обновлены!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||
this.DialogResult = DialogResult.OK;
|
||
this.Close();
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("Не удалось обновить данные.", "Ошибка");
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show("Ошибка при сохранении: " + ex.Message, "Критическая ошибка");
|
||
}
|
||
}
|
||
|
||
private void btnCancel_Click(object sender, EventArgs e)
|
||
{
|
||
this.DialogResult = DialogResult.Cancel;
|
||
this.Close();
|
||
}
|
||
}
|
||
} |