using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Lopushok
{
///
/// Логика взаимодействия для MainPage.xaml
///
public partial class MainPage : Page
{
///
/// Глобальные переменные
///
private List Products;
private List ProductTypes;
private List SortList = new List()
{
"Наименование(Up)","Наименование(Down)",
"Номер производственного цеха(Up)","Номер производственного цеха(Down)",
"Минимальная стоимость для агента(Up)","Минимальная стоимость для агента(Down)"
};
private const int COUNT_TAKE = 20;
private int CountTab = 0;
private int CountSkip = 0;
private int Step = 0;
public MainPage()
{
InitializeComponent();
Load();
LoadData();
}
///
/// 1. Постраничный вывод
/// 2. Фильтрация
/// 3. Сортировка
/// 4. Поиск
///
private void LoadData()
{
Products = Helper.context.Product.ToList();
CmbFilter.ItemsSource = ProductTypes;
CmbSort.ItemsSource = SortList;
Products = Products.Skip(CountSkip).Take(COUNT_TAKE).ToList();
switch (CmbSort.SelectedIndex)
{
case 0:
Products = Products.OrderBy(x => x.Title).ToList();
break;
case 1:
Products = Products.OrderByDescending(x => x.Title).ToList();
break;
case 2:
Products = Products.OrderBy(x => x.ProductionWorkshopNumber).ToList();
break;
case 3:
Products = Products.OrderByDescending(x => x.ProductionWorkshopNumber).ToList();
break;
case 4:
Products = Products.OrderBy(x => x.MinCostForAgent).ToList();
break;
case 5:
Products = Products.OrderByDescending(x => x.MinCostForAgent).ToList();
break;
}
if (CmbFilter.SelectedIndex != 0)
{
Products = Products.Where(x => x.ProductType == (CmbFilter.SelectedItem as ProductType)).ToList();
}
if (TbSearch.Text != string.Empty && TbSearch.Text != "Введите для поиска")
{
Products = Products.Where(x => x.Title.Contains(TbSearch.Text) || x.Description.Contains(TbSearch.Text)).ToList();
}
ProductsList.ItemsSource = Products;
}
///
/// Наполняем наши коллекции контентом
///
private void Load()
{
Products = Helper.context.Product.ToList();
ProductTypes = Helper.context.ProductType.ToList();
ProductTypes.Insert(0, new ProductType { Title = "Все типы" });
CountTab = Products.Count / COUNT_TAKE;
if ((Products.Count % COUNT_TAKE) != 0)
{
CountTab += 1;
}
for (int i = 1; i <= CountTab; i++)
{
NavPanel.Items.Add(i);
}
}
private void TbDown_MouseDown(object sender, MouseButtonEventArgs e)
{
if (Step == 1)
{
return;
}
Step -= 1;
Navigate();
}
private void TbNavPanel_MouseDown(object sender, MouseButtonEventArgs e)
{
Step = Convert.ToInt16((sender as TextBlock).Text);
Navigate();
LoadData();
}
private void Navigate()
{
if (Step == 1)
{
CountSkip = 0;
}
else
{
CountSkip = (Step - 1) * COUNT_TAKE;
}
LoadData();
}
private void TbUp_MouseDown(object sender, MouseButtonEventArgs e)
{//fdgdfg
if (CountTab == Step)
{
return;
}
Step += 1;
Navigate();
}
private void CmbSort_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (CmbSort.SelectedItem != null)
{
LoadData();
}
}
private void CmbFilter_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (CmbFilter.SelectedItem != null)
{
LoadData();
}
}
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (TbSearch.Text != "Введите для поиска" && TbSearch.Text != string.Empty)
{
LoadData();
}
}
private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
if (TbSearch.Text == "Введите для поиска")
{
TbSearch.Text = "";
}
}
///
/// Обновление стоимости продукта
///
///
///
private void BtnUpdateCost_Click(object sender, RoutedEventArgs e)
{
if (ProductsList.SelectedItems.Count > 1)
{
List products = new List();
foreach (Product product in ProductsList.SelectedItems)
{
products.Add(product);
}
new UpdateCostWindow(products).ShowDialog();
}
LoadData();
}
//По заданию: Необходимо добавить возможность изменения минимальной стоимости продукции для агента сразу для
//нескольких выбранных продуктов.
//Выбирать элементы в ListView, через ctrl. За мульти выбор, отвечает SelectionMode="Extended"
private void ProductsList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
BtnUpdateCost.Visibility = ProductsList.SelectedItems.Count > 1 ? Visibility.Visible : Visibility.Collapsed;
}
}
}