## Создание подключения к БД MySQL. Получение данных с сервера #### MainWindow.xaml.cs ``` namespace mysql_connector2 { public partial class MainWindow : Window, INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void Invalidate() { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("productList")); } private int productCount; public List pageList { get; set; } = new List(); public IEnumerable productList { get { Globals.dataProvider.clearFilter(); if (productTypeFilterId > 0) Globals.dataProvider.addFilter( "ProductTypeID = @ProductTypeID", new { ProductTypeID = productTypeFilterId } ); switch (sortType) { case 0: Globals.dataProvider.setOrder(""); break; case 1: Globals.dataProvider.setOrder("Title"); break; case 2: Globals.dataProvider.setOrder("Title DESC"); break; case 3: Globals.dataProvider.setOrder("ArticleNumber"); break; case 4: Globals.dataProvider.setOrder("ArticleNumber DESC"); break; case 5: Globals.dataProvider.setOrder("MaterialCost"); break; case 6: Globals.dataProvider.setOrder("MaterialCost DESC"); break; } if (searchFilter.Length > 0) { Globals.dataProvider.addFilter( "(Title LIKE @search OR Description LIKE @search)", new { search = $"%{searchFilter}%" } ); } var result = Globals.dataProvider.getProduct(currentPage); productCount = Globals.dataProvider.getProductCount(); pageList.Clear(); pageList.Add("<"); for (int i = 1; i < (productCount / Globals.PAGE_LEN) + 1; i++) { pageList.Add(i.ToString()); } pageList.Add(">"); PageListListBox.ItemsSource = pageList; return result; } set { _productList = value; Invalidate(); } } public List productTypeList { get; set; } public MainWindow() { InitializeComponent(); DataContext = this; Globals.dataProvider = new DBDataProvider(); productList = Globals.dataProvider.getProduct(currentPage); productTypeList = Globals.dataProvider.getProductTypes().ToList(); productTypeList.Insert(0, new ProductType { Title = "Все типы продукции" }); } public string[] sortList { get; set; } = { "Без сортировки", "Название по убыванию", "Название по возрастанию", "Артикул по убыванию", "Артикул по возрастанию", "Цена по убыванию", "Цена по возрастанию" }; private IEnumerable _productList; private const int PAGE_LEN = 20; private int _currentPage = 1; private string searchFilter = ""; private int currentPage { get { return _currentPage; } set { _currentPage = value; Invalidate(); } } private void InputElement_OnPointerPressed( object? sender, MouseButtonEventArgs e) { switch ((sender as TextBlock).Text) { case "<": if (currentPage > 1) currentPage--; return; case ">": if (currentPage < productCount / Globals.PAGE_LEN) currentPage++; return; default: currentPage = Convert.ToInt32( (sender as TextBlock).Text ); return; } } private int productTypeFilterId = 0; private void ProductTypeFilter_SelectionChanged(object sender, SelectionChangedEventArgs e) { productTypeFilterId = (ProductTypeFilter.SelectedItem as ProductType).ID; Invalidate(); } private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { } private void SearchFilter_KeyUp(object sender, KeyEventArgs e) { searchFilter = searchFilterTextBox.Text; Invalidate(); } private int sortType = 0; private bool sortAsc = true; private void TextBlock_PreviewMouseDown(object sender, MouseButtonEventArgs e) { switch ((sender as TextBlock).Text) { case "<": if (currentPage > 1) currentPage--; return; case ">": if (currentPage < productCount / Globals.PAGE_LEN) currentPage++; return; default: currentPage = Convert.ToInt32( (sender as TextBlock).Text ); return; } } private void SortTypeComboBox_SelectionChanged( object? sender, SelectionChangedEventArgs e) { if (SortTypeComboBox != null) { sortType = SortTypeComboBox.SelectedIndex; Invalidate(); } } private void SearchFilterTextBox_OnKeyUp(object? sender, KeyEventArgs e) { if (searchFilterTextBox.Text != null && searchFilterTextBox.Text != "") { searchFilter = searchFilterTextBox.Text; Invalidate(); } } private void ExitButton_Click(object sender, RoutedEventArgs e) { Application.Current.Shutdown(); } } } ``` #### MainWindow.xaml ```