Загрузка данных
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using ChudoObuv.ApplicationData;
namespace ChudoObuv.Pages
{
public partial class ProductsPage : Page
{
private List<Products> _all; // все товары из БД
public ProductsPage()
{
InitializeComponent();
// гость и клиент (RoleId = 3) — только просмотр
if (AppConnect.CurrentUser == null || AppConnect.CurrentUser.RoleId == 3)
filterPanel.Visibility = Visibility.Collapsed;
// удалять может только админ (RoleId = 1)
if (AppConnect.CurrentUser?.RoleId != 1)
btnDelete.Visibility = Visibility.Collapsed;
// сортировка
cmbSort.Items.Add("Без сортировки");
cmbSort.Items.Add("Цена по возрастанию");
cmbSort.Items.Add("Цена по убыванию");
cmbSort.SelectedIndex = 0;
// фильтр по категориям из таблицы Categories
cmbFilter.Items.Add("Все категории");
foreach (var c in AppConnect.model01.Categories.ToList())
cmbFilter.Items.Add(c.CategoryName);
cmbFilter.SelectedIndex = 0;
LoadProducts();
}
private void LoadProducts()
{
_all = AppConnect.model01.Products.ToList();
Apply();
}
// поиск + фильтр + сортировка вместе
private void Apply()
{
if (_all == null) return; // события срабатывают ещё до загрузки
var list = _all.AsEnumerable();
string q = txtSearch.Text.Trim().ToLower();
if (q != "")
list = list.Where(p => p.Name.ToLower().Contains(q) ||
(p.Description ?? "").ToLower().Contains(q));
if (cmbFilter.SelectedIndex > 0)
{
string cat = cmbFilter.SelectedItem.ToString();
list = list.Where(p => p.Subcategories.Categories.CategoryName == cat);
}
if (cmbSort.SelectedIndex == 1) list = list.OrderBy(p => p.Price);
if (cmbSort.SelectedIndex == 2) list = list.OrderByDescending(p => p.Price);
listProducts.ItemsSource = list.ToList();
}
private void txtSearch_TextChanged(object sender, TextChangedEventArgs e) => Apply();
private void cmb_SelectionChanged(object sender, SelectionChangedEventArgs e) => Apply();
private void btnDelete_Click(object sender, RoutedEventArgs e)
{
if (!(listProducts.SelectedItem is Products p))
{
MessageBox.Show("Выберите товар!");
return;
}
// если товар уже есть в заказах — удалять нельзя
if (AppConnect.model01.OrderItems.Any(oi => oi.StockItems.ProductId == p.Id))
{
MessageBox.Show("Товар есть в заказах, удалить нельзя.");
return;
}
if (MessageBox.Show($"Удалить «{p.Name}»?", "Подтверждение",
MessageBoxButton.YesNo) != MessageBoxResult.Yes) return;
try
{
AppConnect.model01.StockItems.RemoveRange(p.StockItems.ToList()); // сначала остатки
AppConnect.model01.Products.Remove(p);
AppConnect.model01.SaveChanges();
LoadProducts();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void btnExit_Click(object sender, RoutedEventArgs e)
{
AppConnect.CurrentUser = null;
AppFrame.frmMain.Navigate(new AuthorizationPage());
}
}
}