using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Dem2 { public partial class MainForm : Form { public MainForm() { InitializeComponent(); LoadMaterials(); } private void MainForm_Load(object sender, EventArgs e) { using (var conn = DataBase.GetConnection()) { conn.Open(); string sql = @" SELECT id, material_name FROM materials "; MySqlDataAdapter adapter = new MySqlDataAdapter(sql, conn); DataTable dt = new DataTable(); adapter.Fill(dt); dataGridViewMaterials.DataSource = dt; } } private void LoadMaterials() { try { // Очисти DataGridView перед загрузкой dataGridViewMaterials.Rows.Clear(); using (var conn = DataBase.GetConnection()) { conn.Open(); // Запрос: выбрать все материалы с типом (JOIN с material_types) string sql = @" SELECT m.id, m.material_name, COALESCE(mt.type_name, 'Не указан') AS type_name, m.current_stock, m.unit, m.pack_size, m.min_stock, m.price_per_unit FROM materials m LEFT JOIN material_types mt ON m.material_type_id = mt.id ORDER BY m.material_name"; using (var cmd = new MySqlCommand(sql, conn)) { using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { // Добавь строку в DataGridView int id = Convert.ToInt32(reader["id"]); string name = reader["material_name"].ToString(); string type = reader["type_name"].ToString(); decimal currentStock = reader["current_stock"] != DBNull.Value ? Convert.ToDecimal(reader["current_stock"]) : 0; string unit = reader["unit"].ToString(); decimal packSize = reader["pack_size"] != DBNull.Value ? Convert.ToDecimal(reader["pack_size"]) : 0; decimal minStock = reader["min_stock"] != DBNull.Value ? Convert.ToDecimal(reader["min_stock"]) : 0; decimal pricePerUnit = reader["price_per_unit"] != DBNull.Value ? Convert.ToDecimal(reader["price_per_unit"]) : 0; // Добавляем строку dataGridViewMaterials.Rows.Add(id, name, type, currentStock, unit, packSize, minStock, pricePerUnit); } } } } } catch (Exception ex) { MessageBox.Show("Ошибка загрузки материалов: " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void Button1_Click(object sender, EventArgs e) { var form = new MaterialEditForm(); if (form.ShowDialog() == DialogResult.OK) { LoadMaterials(); } } private void button3_Click(object sender, EventArgs e) { // Проверим, выбрана ли строка в DataGridView if (dataGridViewMaterials.SelectedRows.Count == 0) { // Если строка не выбрана, покажем сообщение MessageBox.Show("Пожалуйста, выберите материал, для которого нужно посмотреть поставщиков.", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information); return; // Прерываем выполнение метода } // Получим ID выбранного материала из первой (и единственной) выбранной строки // Предполагается, что первый столбец - ID (ColumnId) int selectedMaterialId = (int)dataGridViewMaterials.SelectedRows[0].Cells["id"].Value; // Убедись, что имя столбца правильное // Создаём новую форму SupplierListForm, передав ID материала в конструктор var supplierForm = new SupplierListForm(selectedMaterialId); // Открываем форму как модальное окно (пользователь не может взаимодействовать с MainForm, пока открыта SupplierListForm) supplierForm.ShowDialog(); } } }