using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Globalization; 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; using mysql.Classes; using mysql.Model; using mysql.Windows; using MySql.Data.MySqlClient; namespace mysql { /// /// Логика взаимодействия для MainWindow.xaml /// public partial class MainWindow : Window, INotifyPropertyChanged { private IEnumerable _ProductList; private int _CurrentPage = 0; private int ProductTypeFilterId = 0; public List ProductTypeList { get; set; } public string[] SortList { get; set; } = { "Без сортировки", "название по убыванию", "название по возрастанию", "номер цеха по убыванию", "номер цеха по возрастанию", "цена по убыванию", "цена по возрастанию" }; public event PropertyChangedEventHandler PropertyChanged; private int CurrentPage { get { return _CurrentPage; } set { _CurrentPage = value; Invalidate(); } } private int SortType = 0; public IEnumerable ProductList { get { var Result = _ProductList; if (ProductTypeFilterId > 0) Result = Result.Where(i => i.CurrentProductType.ID == ProductTypeFilterId); switch (SortType) { // сортировка по названию продукции case 1: Result = Result.OrderBy(p => p.Title); break; case 2: Result = Result.OrderByDescending(p => p.Title); break; // остальные сортировки реализуйте сами } // ищем вхождение строки фильтра в названии и описании объекта без учета регистра if (SearchFilter != "") Result = Result.Where( p => p.Title.IndexOf(SearchFilter, StringComparison.OrdinalIgnoreCase) >= 0 || p.Description.IndexOf(SearchFilter, StringComparison.OrdinalIgnoreCase) >= 0 ); Paginator.Children.Clear(); Paginator.Children.Add(new TextBlock { Text = " < " }); for (int i = 1; i <= (Result.Count() / 20)+1; i++) Paginator.Children.Add(new TextBlock { Text = " " + i.ToString() + " " }); Paginator.Children.Add(new TextBlock { Text = " > " }); foreach (TextBlock tb in Paginator.Children) tb.PreviewMouseDown += PrevPage_PreviewMouseDown; if (CurrentPage > Result.Count() / 20) CurrentPage = Result.Count() / 20; return Result.Skip(20 * CurrentPage).Take(20); } set { _ProductList = value; Invalidate(); } } private void Invalidate(string ComponentName = "ProductList") { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(ComponentName)); } public MainWindow() { InitializeComponent(); DataContext = this; Globals.DataProvider = new MySQLDataProvider(); Globals.ProductTypeList = Globals.DataProvider.GetProductTypes(); ProductList = Globals.DataProvider.GetProducts(); ProductTypeList = Globals.DataProvider.GetProductTypes().ToList(); ProductTypeList.Insert(0, new ProductType { Title = "Все типы" }); } private void PrevPage_PreviewMouseDown(object sender, MouseButtonEventArgs e) { switch ((sender as TextBlock).Text) { case " < ": if (CurrentPage > 0) CurrentPage--; return; case " > ": if (CurrentPage < _ProductList.Count() / 20) CurrentPage++; return; default: CurrentPage = Convert.ToInt32((sender as TextBlock).Text.Trim())-1; return; } } private void SortTypeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { SortType = SortTypeComboBox.SelectedIndex; Invalidate(); } private void ProductTypeFilter_SelectionChanged(object sender, SelectionChangedEventArgs e) { ProductTypeFilterId = (ProductTypeFilter.SelectedItem as ProductType).ID; Invalidate(); } private string SearchFilter=""; private void SearchFilterTextBox_KeyUp(object sender, KeyEventArgs e) { SearchFilter = SearchFilterTextBox.Text; Invalidate(); } public string CostChangeButtonVisible { get { if (ProductsSelectedCount > 1) return "Visible"; return "Collapsed"; } } public int ProductsSelectedCount = 0; private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e) { ProductsSelectedCount = ProductListView.SelectedItems.Count; Invalidate("CostChangeButtonVisible"); } private void CostChangeButton_Click(object sender, RoutedEventArgs e) { decimal AvgSum = 0; List idList = new List(); foreach (Product item in ProductListView.SelectedItems) { AvgSum += item.MinCostForAgent; idList.Add(item.ID); } var ww = new EnterMinCostForAgentWindow(AvgSum / ProductListView.SelectedItems.Count); if((bool)ww.ShowDialog()) { Globals.DataProvider.SetAverageCostForAgent(idList, ww.Result); ProductList = Globals.DataProvider.GetProducts(); } } private void ProductListView_MouseDoubleClick(object sender, MouseButtonEventArgs e) { var NewEditWindow = new EditWindow(ProductListView.SelectedItem as Product); if ((bool)NewEditWindow.ShowDialog()) { ProductList = Globals.DataProvider.GetProducts(); } } } }