/
Ermoha
/
SqlDataDrivers
Обзор
Документация
Войти
/
Ermoha
/
SqlDataDrivers
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
ProductListForm.cs
207 строк
7 KB
ermoh
Добавьте файлы проекта.
26 май 2026, 22:28
26 май 2026, 22:28
b563253
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using System.Data; using System.Windows.Forms; namespace Demo { internal partial class ProductListForm : Form { private UserSession session; private bool editFormOpened; public ProductListForm(UserSession currentSession) { session = currentSession; InitializeComponent(); AppHelper.SetAppIcon(this); logoPictureBox.Image = AppHelper.LoadImage(@"Images\Icon.png"); userLabel.Text = session.FullName; ConfigureAccess(); LoadSuppliers(); LoadProducts(); } private void ConfigureAccess() { searchLabel.Visible = session.CanSearchProducts; searchTextBox.Visible = session.CanSearchProducts; supplierLabel.Visible = session.CanSearchProducts; supplierComboBox.Visible = session.CanSearchProducts; sortLabel.Visible = session.CanSearchProducts; sortComboBox.Visible = session.CanSearchProducts; addButton.Visible = session.CanEditProducts; ordersButton.Visible = session.CanViewOrders; filterPanel.Visible = session.CanSearchProducts || session.CanEditProducts || session.CanViewOrders; } private void LoadSuppliers() { if (!session.CanSearchProducts) { return; } supplierComboBox.Items.Clear(); supplierComboBox.Items.Add(new ComboItem(0, "Все поставщики")); DataTable table = DatabaseHelper.GetData("SELECT SupplierId, SupplierName FROM dbo.Suppliers ORDER BY SupplierName"); foreach (DataRow row in table.Rows) { supplierComboBox.Items.Add(new ComboItem(Convert.ToInt32(row["SupplierId"]), row["SupplierName"].ToString())); } supplierComboBox.SelectedIndex = 0; } private void LoadProducts() { try { string sql = "SELECT p.ProductId, p.Article, p.ProductName, u.UnitName, p.Price, " + "s.SupplierName, s.SupplierId, m.ManufacturerName, c.CategoryName, " + "p.Discount, p.Quantity, p.Description, p.PhotoPath " + "FROM dbo.Products p " + "INNER JOIN dbo.Units u ON u.UnitId = p.UnitId " + "INNER JOIN dbo.Suppliers s ON s.SupplierId = p.SupplierId " + "INNER JOIN dbo.Manufacturers m ON m.ManufacturerId = p.ManufacturerId " + "INNER JOIN dbo.Categories c ON c.CategoryId = p.CategoryId"; List<string> conditions = new List<string>(); if (session.CanSearchProducts) { string search = searchTextBox.Text.Trim(); if (search.Length > 0) { search = AppHelper.Escape(search); conditions.Add( "(p.Article LIKE N'%" + search + "%' " + "OR p.ProductName LIKE N'%" + search + "%' " + "OR p.Description LIKE N'%" + search + "%' " + "OR s.SupplierName LIKE N'%" + search + "%' " + "OR m.ManufacturerName LIKE N'%" + search + "%' " + "OR c.CategoryName LIKE N'%" + search + "%' " + "OR u.UnitName LIKE N'%" + search + "%')"); } ComboItem supplier = supplierComboBox.SelectedItem as ComboItem; if (supplier != null && supplier.Id > 0) { conditions.Add("p.SupplierId = " + supplier.Id); } } if (conditions.Count > 0) { sql += " WHERE " + string.Join(" AND ", conditions.ToArray()); } if (session.CanSearchProducts && sortComboBox.SelectedIndex == 1) { sql += " ORDER BY p.Quantity"; } else if (session.CanSearchProducts && sortComboBox.SelectedIndex == 2) { sql += " ORDER BY p.Quantity DESC"; } else { sql += " ORDER BY p.ProductName, p.Article"; } ShowProducts(DatabaseHelper.GetData(sql)); } catch (Exception ex) { AppHelper.ShowError("Не удалось загрузить товары.\n" + ex.Message); } } private void ShowProducts(DataTable table) { productsPanel.SuspendLayout(); productsPanel.Controls.Clear(); foreach (DataRow row in table.Rows) { ProductCardControl card = new ProductCardControl(row, session.CanEditProducts); card.ProductSelected += ProductCard_ProductSelected; productsPanel.Controls.Add(card); } productsPanel.ResumeLayout(); } private void ProductCard_ProductSelected(object sender, EventArgs e) { if (editFormOpened) { return; } ProductCardControl card = sender as ProductCardControl; if (card == null) { return; } editFormOpened = true; using (ProductEditForm form = new ProductEditForm(card.ProductId)) { if (form.ShowDialog() == DialogResult.OK) { LoadProducts(); } } editFormOpened = false; } private void AddButton_Click(object sender, EventArgs e) { if (editFormOpened) { return; } editFormOpened = true; using (ProductEditForm form = new ProductEditForm(0)) { if (form.ShowDialog() == DialogResult.OK) { LoadProducts(); } } editFormOpened = false; } private void OrdersButton_Click(object sender, EventArgs e) { using (OrdersForm form = new OrdersForm(session)) { form.ShowDialog(); } } private void ExitButton_Click(object sender, EventArgs e) { Close(); } private void FilterChanged(object sender, EventArgs e) { LoadProducts(); } } }