dem3/MainForm.cs
2025-11-18 17:27:48 +04:00

128 lines
5.4 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}
}