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 SupplierListForm : Form { public SupplierListForm() { InitializeComponent(); } // Поле для хранения ID материала, для которого смотрим поставщиков private int materialId; // Конструктор, который принимает ID материала public SupplierListForm(int materialId) { InitializeComponent(); this.materialId = materialId; LoadSuppliers(); // Загрузить поставщиков при открытии формы } private void LoadSuppliers() { try { // Очистим старые строки dataGridViewSuppliers.Rows.Clear(); using (var conn = DataBase.GetConnection()) // Убедись, что имя класса подключения правильное! { conn.Open(); // SQL-запрос: получить поставщиков для конкретного материала // JOIN между suppliers, material_suppliers, supplier_ratings, supplier_contract_start string sql = @" SELECT s.name AS supplier_name, COALESCE(sr.rating_value, 0) AS rating_value, -- Если нет рейтинга, показываем 0 COALESCE(scs.start_date, '1900-01-01') AS start_date -- Если нет даты, показываем 1900-01-01 FROM suppliers s INNER JOIN material_suppliers ms ON s.id = ms.supplier_id LEFT JOIN supplier_ratings sr ON s.id = sr.supplier_id LEFT JOIN supplier_contract_start scs ON s.id = scs.supplier_id WHERE ms.material_id = @materialId ORDER BY s.name"; // Сортировка по имени поставщика using (var cmd = new MySqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@materialId", materialId); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { string supplierName = reader["supplier_name"].ToString(); // Проверка на NULL для rating_value int rating = reader["rating_value"] != DBNull.Value ? Convert.ToInt32(reader["rating_value"]) : 0; DateTime startDate = Convert.ToDateTime(reader["start_date"]); // Добавляем строку в DataGridView dataGridViewSuppliers.Rows.Add(supplierName, rating, startDate.ToString("yyyy-MM-dd")); // Формат даты } } } } } catch (Exception ex) { MessageBox.Show("Ошибка загрузки поставщиков: " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }