Page1.xaml.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Navigation;
  14. using System.Windows.Shapes;
  15. namespace Test
  16. {
  17. /// <summary>
  18. /// Логика взаимодействия для Page1.xaml
  19. /// </summary>
  20. public partial class Page1 : Page
  21. {
  22. Materials vm = new Materials();//инициализируем наш класс из вьюмодел
  23. List<Material> filterMaterial; //дополнительный лист, в котором буду храниться данные при изменении фильтров
  24. public Page1()
  25. {
  26. InitializeComponent();
  27. LBox.ItemsSource = vm.material.ToList();//отображаем выгруженнные данные в лист бокс, вызов биндинга
  28. LBox.Items.Refresh(); //обновление листа для работы фильтрв
  29. All.Text = vm.material.Count.ToString(); // в значение всех записей кладем количесво из БД
  30. Now.Text = vm.material.Count.ToString(); //по-умолчанию, до применения фильтрв, в текущее значение кладем тоже количесво из БД
  31. CB2.ItemsSource = Base.Ent.MaterialType.ToList();//заполняем комбобокс из БД
  32. CB2.SelectedValuePath = "ID"; //указываем, что обращаться будем по ID из бд
  33. CB2.DisplayMemberPath = "Title"; //а отображаться будет название из БД
  34. CB2.SelectedIndex = 4;//указываем, чтобы по умолчанию стоял статус Все типы (тут индексы начинаются с 0, поэтому не 5, как в БД, а 4)
  35. }
  36. private void Filter(object sender, RoutedEventArgs e) //RoutedEventArgs! чтобы один метод для всего был и работало все вместе
  37. {
  38. filterMaterial = vm.material.ToList(); //для осуществления отбора сначала кладем в лист для фильтрации все значение тз БД
  39. if(CB2.SelectedIndex == 4)//если фильра "Все типы"
  40. {
  41. filterMaterial = filterMaterial; //лист не меняем, для того, чтобы все работала одновременно, всегда обращаемся к одному и тому же листу для фильтров
  42. }
  43. else
  44. {
  45. filterMaterial = filterMaterial.Where(x => x.MaterialTypeID == CB2.SelectedIndex+1).ToList(); //ищем только те значения, у который id тип материала совпадает с выбранным индексом (т.к. они с 0 в комбобоксе, а в БД с 1, делаем +1)
  46. }
  47. switch(CB.SelectedIndex)//сортировка
  48. {
  49. case 0:
  50. filterMaterial = filterMaterial.OrderBy(x => x.Title).ToList();//по возрастанию - в линкью запросе пишем поле для сортировке
  51. break;
  52. case 1:
  53. filterMaterial = filterMaterial.OrderBy(x => x.Title).ToList();
  54. filterMaterial.Reverse();//по убыванию
  55. break;
  56. case 2:
  57. filterMaterial = filterMaterial.OrderBy(x => x.CountInStock).ToList();
  58. break;
  59. case 3:
  60. filterMaterial = filterMaterial.OrderBy(x => x.CountInStock).ToList();
  61. filterMaterial.Reverse();
  62. break;
  63. case 4:
  64. filterMaterial = filterMaterial.OrderBy(x => x.Cost).ToList();
  65. break;
  66. case 5:
  67. filterMaterial = filterMaterial.OrderBy(x => x.Cost).ToList();
  68. filterMaterial.Reverse();
  69. break;
  70. }
  71. if(TB.Text!="")//поиск, добавляем, что если поле пустое, мы не ищем в бд пустоту, а просто ничего не делаем
  72. {
  73. filterMaterial = filterMaterial.Where(x => x.Title.Contains(TB.Text)).ToList();//создаем запрос, где говорим, что название должно в себя включать то, что написано в строке
  74. }
  75. LBox.ItemsSource = filterMaterial; //обновляет ЛистБокс, чтоб там оставлись только данные после сортирвке
  76. Now.Text = filterMaterial.Count.ToString();//считаем количесво, чтоб изменить количество текущих данных на странице
  77. }
  78. private void LBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  79. {
  80. if (LBox.SelectedItems.Count > 1) //делаем кнопку видимой, если выделено 2 и более записей
  81. {
  82. ChangeOn.Visibility = Visibility.Visible;
  83. }
  84. else
  85. {
  86. ChangeOn.Visibility = Visibility.Hidden; //скрываем, если пользователь снял выделения
  87. }
  88. }
  89. private void Button_Click(object sender, RoutedEventArgs e)
  90. {
  91. Count newCoast = new Count(); //инициализируем новое окно
  92. if (newCoast.ShowDialog() == true) //если окно вернуло какое-то дейсвие
  93. {
  94. MessageBox.Show("Цена успешно изменена");
  95. }
  96. else
  97. {
  98. MessageBox.Show("Изменение не выполнено");
  99. }
  100. }
  101. private void Red_Click(object sender, RoutedEventArgs e)
  102. {
  103. Button sp = (Button)sender; //инициализируем нажатую кнопку
  104. int id = Convert.ToInt32(sp.Uid); //выделяем ID по биндингу
  105. Material material = Base.Ent.Material.FirstOrDefault(x => x.ID == id); //сохраняем строчку из бд с соответсвующем ID
  106. new WindowRed(material).ShowDialog(); //открываем окно редактирования и туда отправляем материал, чтобы исходные данные отображались, только именно не Show, а ShowDialog, чтобы нельзя было открыть несколько окон
  107. }
  108. private void Dob_Click(object sender, RoutedEventArgs e)
  109. {
  110. new WindowDob().ShowDialog(); //открывам окно добавления, только именно не Show, а ShowDialog, чтобы нельзя было открыть несколько окон
  111. }
  112. }
  113. }