123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- 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 Test
- {
- /// <summary>
- /// Логика взаимодействия для Page1.xaml
- /// </summary>
- public partial class Page1 : Page
- {
- Materials vm = new Materials();//инициализируем наш класс из вьюмодел
- List<Material> filterMaterial; //дополнительный лист, в котором буду храниться данные при изменении фильтров
- public Page1()
- {
- InitializeComponent();
- LBox.ItemsSource = vm.material.ToList();//отображаем выгруженнные данные в лист бокс, вызов биндинга
- LBox.Items.Refresh(); //обновление листа для работы фильтрв
- All.Text = vm.material.Count.ToString(); // в значение всех записей кладем количесво из БД
- Now.Text = vm.material.Count.ToString(); //по-умолчанию, до применения фильтрв, в текущее значение кладем тоже количесво из БД
- CB2.ItemsSource = Base.Ent.MaterialType.ToList();//заполняем комбобокс из БД
- CB2.SelectedValuePath = "ID"; //указываем, что обращаться будем по ID из бд
- CB2.DisplayMemberPath = "Title"; //а отображаться будет название из БД
- CB2.SelectedIndex = 4;//указываем, чтобы по умолчанию стоял статус Все типы (тут индексы начинаются с 0, поэтому не 5, как в БД, а 4)
- }
- private void Filter(object sender, RoutedEventArgs e) //RoutedEventArgs! чтобы один метод для всего был и работало все вместе
- {
- filterMaterial = vm.material.ToList(); //для осуществления отбора сначала кладем в лист для фильтрации все значение тз БД
- if(CB2.SelectedIndex == 4)//если фильра "Все типы"
- {
- filterMaterial = filterMaterial; //лист не меняем, для того, чтобы все работала одновременно, всегда обращаемся к одному и тому же листу для фильтров
- }
- else
- {
- filterMaterial = filterMaterial.Where(x => x.MaterialTypeID == CB2.SelectedIndex+1).ToList(); //ищем только те значения, у который id тип материала совпадает с выбранным индексом (т.к. они с 0 в комбобоксе, а в БД с 1, делаем +1)
- }
- switch(CB.SelectedIndex)//сортировка
- {
- case 0:
- filterMaterial = filterMaterial.OrderBy(x => x.Title).ToList();//по возрастанию - в линкью запросе пишем поле для сортировке
- break;
- case 1:
- filterMaterial = filterMaterial.OrderBy(x => x.Title).ToList();
- filterMaterial.Reverse();//по убыванию
- break;
- case 2:
- filterMaterial = filterMaterial.OrderBy(x => x.CountInStock).ToList();
- break;
- case 3:
- filterMaterial = filterMaterial.OrderBy(x => x.CountInStock).ToList();
- filterMaterial.Reverse();
- break;
- case 4:
- filterMaterial = filterMaterial.OrderBy(x => x.Cost).ToList();
- break;
- case 5:
- filterMaterial = filterMaterial.OrderBy(x => x.Cost).ToList();
- filterMaterial.Reverse();
- break;
- }
- if(TB.Text!="")//поиск, добавляем, что если поле пустое, мы не ищем в бд пустоту, а просто ничего не делаем
- {
- filterMaterial = filterMaterial.Where(x => x.Title.Contains(TB.Text)).ToList();//создаем запрос, где говорим, что название должно в себя включать то, что написано в строке
- }
- LBox.ItemsSource = filterMaterial; //обновляет ЛистБокс, чтоб там оставлись только данные после сортирвке
- Now.Text = filterMaterial.Count.ToString();//считаем количесво, чтоб изменить количество текущих данных на странице
- }
- private void LBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- if (LBox.SelectedItems.Count > 1) //делаем кнопку видимой, если выделено 2 и более записей
- {
- ChangeOn.Visibility = Visibility.Visible;
- }
- else
- {
- ChangeOn.Visibility = Visibility.Hidden; //скрываем, если пользователь снял выделения
- }
- }
- private void Button_Click(object sender, RoutedEventArgs e)
- {
- Count newCoast = new Count(); //инициализируем новое окно
- if (newCoast.ShowDialog() == true) //если окно вернуло какое-то дейсвие
- {
- MessageBox.Show("Цена успешно изменена");
- }
- else
- {
- MessageBox.Show("Изменение не выполнено");
- }
- }
- private void Red_Click(object sender, RoutedEventArgs e)
- {
- Button sp = (Button)sender; //инициализируем нажатую кнопку
- int id = Convert.ToInt32(sp.Uid); //выделяем ID по биндингу
- Material material = Base.Ent.Material.FirstOrDefault(x => x.ID == id); //сохраняем строчку из бд с соответсвующем ID
- new WindowRed(material).ShowDialog(); //открываем окно редактирования и туда отправляем материал, чтобы исходные данные отображались, только именно не Show, а ShowDialog, чтобы нельзя было открыть несколько окон
- }
- private void Dob_Click(object sender, RoutedEventArgs e)
- {
- new WindowDob().ShowDialog(); //открывам окно добавления, только именно не Show, а ShowDialog, чтобы нельзя было открыть несколько окон
- }
- }
- }
|