/
DaNN26
/
SQLProvider
Обзор
Документация
Войти
/
DaNN26
/
SQLProvider
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
ProductListForm.cs
214 строк
6 KB
DaNN
Добавьте файлы проекта.
27 май 2026, 12:50
27 май 2026, 12:50
4fe37b9
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using System.Data; using System.Windows.Forms; namespace Demo { internal partial class ProductListForm : Form { private const string LogoPath = @"Images\Icon.png"; private const string SupplierSql = "SELECT SupplierId, SupplierName FROM dbo.Suppliers ORDER BY SupplierName"; private UserSession user; private bool editBusy; public ProductListForm(UserSession currentSession) { user = currentSession; InitializeComponent(); AppHelper.SetAppIcon(this); logoPictureBox.Image = AppHelper.LoadImage(LogoPath); userLabel.Text = user.FullName; ConfigureAccess(); LoadSuppliers(); LoadProducts(); } private void ConfigureAccess() { searchLabel.Visible = user.CanSearchProducts; searchTextBox.Visible = user.CanSearchProducts; supplierLabel.Visible = user.CanSearchProducts; supplierComboBox.Visible = user.CanSearchProducts; sortLabel.Visible = user.CanSearchProducts; sortComboBox.Visible = user.CanSearchProducts; addButton.Visible = user.CanEditProducts; ordersButton.Visible = user.CanViewOrders; filterPanel.Visible = user.CanSearchProducts || user.CanEditProducts || user.CanViewOrders; } private void LoadSuppliers() { if (!user.CanSearchProducts) { return; } supplierComboBox.Items.Clear(); supplierComboBox.Items.Add(new ComboItem(0, "Все поставщики")); var table = DatabaseHelper.GetData(SupplierSql); 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 { ShowProducts(DatabaseHelper.GetData(ProductSql())); } catch (Exception ex) { AppHelper.ShowError("Не удалось загрузить товары.\n" + ex.Message); } } private void ShowProducts(DataTable table) { productsPanel.SuspendLayout(); productsPanel.Controls.Clear(); foreach (DataRow row in table.Rows) { var card = new ProductCardControl(row, user.CanEditProducts); card.ProductSelected += ProductCard_ProductSelected; productsPanel.Controls.Add(card); } productsPanel.ResumeLayout(); } private string ProductSql() { var 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"; var filters = Filters(); if (filters.Count > 0) { sql += " WHERE " + string.Join(" AND ", filters.ToArray()); } return sql + SortSql(); } private List<string> Filters() { var filters = new List<string>(); if (!user.CanSearchProducts) { return filters; } var search = searchTextBox.Text.Trim(); if (search.Length > 0) { search = AppHelper.Escape(search); filters.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 + "%')"); } var supplier = supplierComboBox.SelectedItem as ComboItem; if (supplier != null && supplier.Id > 0) { filters.Add("p.SupplierId = " + supplier.Id); } return filters; } private string SortSql() { if (!user.CanSearchProducts) { return " ORDER BY p.ProductName, p.Article"; } switch (sortComboBox.SelectedIndex) { case 1: return " ORDER BY p.Quantity"; case 2: return " ORDER BY p.Quantity DESC"; default: return " ORDER BY p.ProductName, p.Article"; } } private void ProductCard_ProductSelected(object sender, EventArgs e) { var card = sender as ProductCardControl; if (card != null) { OpenEditor(card.ProductId); } } private void AddButton_Click(object sender, EventArgs e) { OpenEditor(0); } private void OpenEditor(int productId) { if (editBusy) { return; } editBusy = true; using (var form = new ProductEditForm(productId)) { if (form.ShowDialog() == DialogResult.OK) { LoadProducts(); } } editBusy = false; } private void OrdersButton_Click(object sender, EventArgs e) { using (var form = new OrdersForm(user)) { form.ShowDialog(); } } private void ExitButton_Click(object sender, EventArgs e) { Close(); } private void FilterChanged(object sender, EventArgs e) { LoadProducts(); } } }