87 lines
3.7 KiB
C#
87 lines
3.7 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|