CatViewPage.xaml.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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 CatProject
  16. {
  17. /// <summary>
  18. /// Логика взаимодействия для CatViewPage.xaml
  19. /// </summary>
  20. public partial class CatViewPage : Page
  21. {
  22. public CatViewPage()
  23. {
  24. InitializeComponent();
  25. CatList.ItemsSource = BaseClass.BaseConnect.CatTable.ToList(); // передаем записи из таблицы БД ListView
  26. List<BreedTable> breedList = BaseClass.BaseConnect.BreedTable.ToList();
  27. // программное заполнение выпадающего списка
  28. CBFilterBreed.Items.Add("Все породы"); // первый элемент выпадающего списка, который сбрасывает фильтрацию
  29. foreach (BreedTable breed in breedList) // цикл для записи в выпадающий список всех пород котов из БД
  30. {
  31. CBFilterBreed.Items.Add(breed.Breed); // выбранное по умолчанию значение в списке с породами котов ("Все породы")
  32. }
  33. CBFilterBreed.SelectedIndex = 0;
  34. }
  35. void Filter() // метод для одновременной фильтрации, поиска и сортировки
  36. {
  37. List<CatTable> catFilter = new List<CatTable>(); // пустой список, который далее будет заполнять элементами, удавлетворяющими условиям фильтрации, поиска и сортировки
  38. string breed = CBFilterBreed.SelectedValue.ToString(); // выбранное пользователем название породы
  39. // поиск значений, удовлетворяющих условия фильтра
  40. if (CBFilterBreed.SelectedIndex!=0)
  41. {
  42. catFilter = BaseClass.BaseConnect.CatTable.Where(x => x.BreedTable.Breed == breed).ToList();
  43. }
  44. else
  45. {
  46. catFilter = BaseClass.BaseConnect.CatTable.ToList(); // если выбран пункт "Все породы", то сбрасываем фильтрацию:
  47. }
  48. // поиск совпадений по именам котов
  49. if (!string.IsNullOrWhiteSpace(TBSearch.Text)) // если строка не пустая и если она не состоит из пробелов
  50. {
  51. catFilter =catFilter.Where(x => x.CatName.ToLower().Contains(TBSearch.Text.ToLower())).ToList();
  52. }
  53. // выбор только котов-мальчиков
  54. if (CBOnly.IsChecked==true)
  55. {
  56. catFilter = catFilter.Where(x => x.idGender == 1).ToList();
  57. }
  58. // сортировка
  59. if (RBUp.IsChecked==true) // позрастанию имени
  60. {
  61. catFilter.Sort((x,y)=>x.CatName.CompareTo(y.CatName));
  62. }
  63. if (RBDown.IsChecked==true) // по убыванию имени
  64. {
  65. catFilter.Sort((x, y) => x.CatName.CompareTo(y.CatName));
  66. catFilter.Reverse();
  67. }
  68. CatList.ItemsSource = catFilter;
  69. }
  70. private void TextBlock_Loaded(object sender, RoutedEventArgs e) // загрузка черт характера
  71. {
  72. TextBlock tb = (TextBlock)sender; // получаем доступ к TextBlock из шаблона
  73. int index = Convert.ToInt32(tb.Uid); // получаем числовой Uid элемента списка (в разметке предварительно нужно связать номер ячейки с номером кота в базе данных)
  74. // ищем в таблице, где хранятся черты характера котов те записи, которые соответсвуют определенному коту
  75. List<TraitCatTable> TCT = BaseClass.BaseConnect.TraitCatTable.Where(x => x.idCat == index).ToList();
  76. string str = "";
  77. // выписывам все черты характера в переменную
  78. foreach (TraitCatTable t in TCT)
  79. {
  80. str += t.TraitTable.Trait + ", ";
  81. }
  82. if (str!="")
  83. tb.Text = str.Substring(0, str.Length - 2);
  84. }
  85. private void TextBlock_Loaded_1(object sender, RoutedEventArgs e) // загрузка информации о том, сколько будет денег тратиться на кота
  86. {
  87. TextBlock tb = (TextBlock)sender; // получаем доступ к TextBlock из шаблона
  88. int index = Convert.ToInt32(tb.Uid); // получаем числовой Uid элемента списка (в разметке предварительно нужно связать номер ячейки с номером кота в базе данных)
  89. // ищем в таблице, где хранятится информация о кормах для кота, которые соответсвуют определенному коту
  90. List<feedCatTable> FCT = BaseClass.BaseConnect.feedCatTable.Where(x => x.idCat == index).ToList();
  91. int sum = 0;
  92. // вычисляем общее количестов денег на кота, для этого умножаем количество корма на цену корма
  93. foreach (feedCatTable t in FCT)
  94. {
  95. sum += t.Feedtable.Price * t.Count;
  96. }
  97. tb.Text = "Трата на кота: " + sum.ToString();
  98. }
  99. private void AddCat_Click(object sender, RoutedEventArgs e)
  100. {
  101. FrameClass.MainFrame.Navigate(new AddPage());
  102. }
  103. private void Button_Click(object sender, RoutedEventArgs e)
  104. {
  105. Button tb = (Button)sender; // получаем доступ к TextBlock из шаблона
  106. int index = Convert.ToInt32(tb.Uid); // получаем числовой Uid элемента списка (в разметке предварительно нужно связать номер ячейки с номером кота в базе данных)
  107. FrameClass.MainFrame.Navigate(new AddPage(index));
  108. }
  109. private void Button_Click_1(object sender, RoutedEventArgs e) // удаление кота
  110. {
  111. Button tb = (Button)sender; // получаем доступ к TextBlock из шаблона
  112. int index = Convert.ToInt32(tb.Uid); // получаем числовой Uid элемента списка (в разметке предварительно нужно связать номер ячейки с номером кота в базе данных)
  113. CatTable catRemove = BaseClass.BaseConnect.CatTable.FirstOrDefault(x=>x.idCat == index);
  114. switch(MessageBox.Show("Удалить кота???", "RemoveCat", MessageBoxButton.YesNo, MessageBoxImage.Question))
  115. {
  116. case MessageBoxResult.Yes:
  117. BaseClass.BaseConnect.CatTable.Remove(catRemove);
  118. MessageBox.Show("Кот удален");
  119. BaseClass.BaseConnect.SaveChanges();
  120. FrameClass.MainFrame.Navigate(new CatViewPage());
  121. break;
  122. case MessageBoxResult.No:
  123. MessageBox.Show("Кот не удален");
  124. break;
  125. }
  126. }
  127. // далее во всех обработчиках событий применяем один и тот же метод Filter, который позволяет находить условия, удовлетворяющие всем сразу выбранным параметрам
  128. private void TBSearch_TextChanged(object sender, TextChangedEventArgs e)
  129. {
  130. Filter();
  131. }
  132. private void CBFilterBreed_SelectionChanged(object sender, SelectionChangedEventArgs e)
  133. {
  134. Filter();
  135. }
  136. private void CBOnly_Checked(object sender, RoutedEventArgs e)
  137. {
  138. Filter();
  139. }
  140. private void CBOnly_Unchecked(object sender, RoutedEventArgs e)
  141. {
  142. Filter();
  143. }
  144. private void RBUp_Checked(object sender, RoutedEventArgs e)
  145. {
  146. Filter();
  147. }
  148. private void BtnAuto_Click(object sender, RoutedEventArgs e) // авторизация
  149. {
  150. WindowAuto windowAuto = new WindowAuto();
  151. windowAuto.ShowDialog();
  152. }
  153. }
  154. }