AddPage.xaml.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. using Microsoft.Win32;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Windows;
  8. using System.Windows.Controls;
  9. using System.Windows.Data;
  10. using System.Windows.Documents;
  11. using System.Windows.Input;
  12. using System.Windows.Media;
  13. using System.Windows.Media.Imaging;
  14. using System.Windows.Navigation;
  15. using System.Windows.Shapes;
  16. namespace CatProject
  17. {
  18. enum StateOfPage { Create, Update };
  19. /// <summary>
  20. /// Логика взаимодействия для AddPage.xaml
  21. /// </summary>
  22. public partial class AddPage : Page
  23. {
  24. string path; // переменная для хранения пути к фото кота
  25. StateOfPage stateOfPage; // перечисление для создания флага о том, создаем нового кота или редактируем старого
  26. CatTable cat = new CatTable(); // создаем объект для кота
  27. void addList() // метод для заполнения списков
  28. {
  29. // список с породами
  30. CBBreed.ItemsSource = BaseClass.BaseConnect.BreedTable.ToList();
  31. CBBreed.DisplayMemberPath = "Breed";
  32. CBBreed.SelectedValuePath = "idBreed";
  33. // список с чертами характера
  34. LBTrait.ItemsSource = BaseClass.BaseConnect.TraitTable.ToList();
  35. LBTrait.DisplayMemberPath = "Trait";
  36. LBTrait.SelectedValuePath = "idTrait";
  37. // список с кормами для кота
  38. LBFeed.ItemsSource = BaseClass.BaseConnect.Feedtable.ToList();
  39. }
  40. // конструктор для создания нового кота (без аргументов)
  41. public AddPage()
  42. {
  43. InitializeComponent();
  44. addList();
  45. stateOfPage = StateOfPage.Create;
  46. }
  47. // конструктор для редактирования данных о коте ( с аргументом, который хранит id кота, которого хотим отредактировать)
  48. public AddPage(int index)
  49. {
  50. InitializeComponent();
  51. BtnAdd.Content = "Внести изменения"; // изменили текст в кнопке
  52. addList(); // заполняем списки
  53. stateOfPage = StateOfPage.Update; // флаг, что редактирум кота (созданный через перечисление)
  54. cat = BaseClass.BaseConnect.CatTable.FirstOrDefault(x => x.idCat == index); // ищем в базе кота по id
  55. TBName.Text = cat.CatName; // вывод имени кота
  56. BreedTable breed = BaseClass.BaseConnect.BreedTable.FirstOrDefault(x => x.idBreed == cat.idBreed); // поиск породы кота
  57. CBBreed.SelectedItem = breed; // вывод породы кота
  58. DPBirthday.SelectedDate = cat.Birthday; // вывод даты рождения
  59. switch (cat.idGender) // вывод пола кота
  60. {
  61. case 1:
  62. RBMen.IsChecked = true;
  63. break;
  64. case 2:
  65. RBWomen.IsChecked = true;
  66. break;
  67. }
  68. TBPassport.Text = cat.PasssportTable.UniqueNumber.ToString(); // вывод паспорта
  69. TBColor.Text = cat.PasssportTable.Color; // вывод окраса
  70. // находим черты характера того кота, которого мы редактируем:
  71. List<TraitCatTable> TC = BaseClass.BaseConnect.TraitCatTable.Where(x => x.idCat == cat.idCat).ToList();
  72. // цикл для выделения черт характера кота в общем списке:
  73. foreach (TraitTable t in LBTrait.Items)
  74. {
  75. if (TC.FirstOrDefault(x => x.idTrait == t.idTrait) != null)
  76. {
  77. LBTrait.SelectedItems.Add(t);
  78. }
  79. }
  80. // находим корма для того кота, которого мы редактируем
  81. List<feedCatTable> FC = BaseClass.BaseConnect.feedCatTable.Where(x => x.idCat == cat.idCat).ToList();
  82. // цикл для отображения кормов и их количества для кота:
  83. foreach (Feedtable t in LBFeed.Items)
  84. {
  85. feedCatTable f = FC.FirstOrDefault(x => x.idFeed == t.idFeed);
  86. if (f != null)
  87. {
  88. t.NumFeed = f.Count;
  89. }
  90. }
  91. }
  92. private void BtnAdd_Click(object sender, RoutedEventArgs e)
  93. {
  94. try
  95. {
  96. int gender = 0;
  97. if (RBMen.IsChecked == true)
  98. {
  99. gender = 1;
  100. }
  101. if (RBWomen.IsChecked == true)
  102. {
  103. gender = 2;
  104. }
  105. // заполняем поля таблицы CatTable
  106. cat.CatName = TBName.Text;
  107. cat.idBreed = ((BreedTable)CBBreed.SelectedItem).idBreed;
  108. cat.Birthday = DPBirthday.DisplayDate.Date;
  109. cat.idGender = gender;
  110. cat.Photo = path;
  111. if (stateOfPage == StateOfPage.Create) // если значение перечисления означает "Добавить кота", то добавляем объект в базу
  112. {
  113. BaseClass.BaseConnect.CatTable.Add(cat);
  114. }
  115. // проверяем, есть ли в базе данные о паспорте кота, если есть то удаляем эти данные
  116. PasssportTable PT = BaseClass.BaseConnect.PasssportTable.FirstOrDefault(x => x.idCat == cat.idCat);
  117. if (PT != null)
  118. {
  119. BaseClass.BaseConnect.PasssportTable.Remove(PT);
  120. }
  121. // формируем новый объект с данными паспорта кота
  122. PasssportTable pas = new PasssportTable()
  123. {
  124. idCat = cat.idCat,
  125. UniqueNumber = TBPassport.Text,
  126. Color = TBColor.Text
  127. };
  128. BaseClass.BaseConnect.PasssportTable.Add(pas); // добавляем объект в базу
  129. // Для заполнения таблицы TraitCatTable нужно организовать цикл, так как черт характера у кота может быть несколько
  130. // Цикл будет организовывать по чертам характера, которые выделены в списке
  131. // находим в базе список черт характера кота:
  132. List<TraitCatTable> listTraitCat = BaseClass.BaseConnect.TraitCatTable.Where(x => x.idCat == cat.idCat).ToList();
  133. // если список не пустой, удаляем из него все черты характера этого кота
  134. if (listTraitCat.Count > 0)
  135. {
  136. foreach (TraitCatTable t in listTraitCat)
  137. {
  138. BaseClass.BaseConnect.TraitCatTable.Remove(t);
  139. }
  140. }
  141. // перезаписываем черты кота (или добавляем черты для нового кота)
  142. foreach (TraitTable t in LBTrait.SelectedItems)
  143. {
  144. TraitCatTable TCT = new TraitCatTable()
  145. {
  146. idCat = cat.idCat,
  147. idTrait = t.idTrait,
  148. };
  149. BaseClass.BaseConnect.TraitCatTable.Add(TCT);
  150. }
  151. // Для заполнения таблицы feedCatTable нужно организовать цикл, так как кормов у кота может быть несколько
  152. // Цикл будет организовывать по всем кормам, которые есть в списке
  153. // находим список с кормами для кота
  154. List<feedCatTable> listFeedCat = BaseClass.BaseConnect.feedCatTable.Where(x => x.idCat == cat.idCat).ToList();
  155. // если список не пустой, удаляем из него все корма для этого кота
  156. if (listFeedCat.Count > 0)
  157. {
  158. foreach (feedCatTable t in listFeedCat)
  159. {
  160. BaseClass.BaseConnect.feedCatTable.Remove(t);
  161. }
  162. }
  163. // перезаписываем корма для кота (или добавляем корма для нового кота)
  164. foreach (Feedtable f in LBFeed.Items)
  165. {
  166. if (f.NumFeed > 0)
  167. {
  168. feedCatTable FCT = new feedCatTable()
  169. {
  170. idCat = cat.idCat,
  171. idFeed = f.idFeed,
  172. Count = f.NumFeed
  173. };
  174. BaseClass.BaseConnect.feedCatTable.Add(FCT);
  175. }
  176. }
  177. BaseClass.BaseConnect.SaveChanges(); // сохраняем все внесенные изменения в базе данных
  178. if (stateOfPage == StateOfPage.Create)
  179. {
  180. MessageBox.Show("Кот добавлен");
  181. }
  182. else
  183. {
  184. MessageBox.Show("Изменения о коте внесены");
  185. }
  186. FrameClass.MainFrame.Navigate(new CatViewPage());
  187. }
  188. catch
  189. {
  190. MessageBox.Show("Что-то пошло не так");
  191. System.Windows.Application.Current.Shutdown();
  192. }
  193. }
  194. private void AddPhotoCat_Click(object sender, RoutedEventArgs e) // добавление фото кота с помощью диалогового окна
  195. {
  196. try
  197. {
  198. OpenFileDialog OFD = new OpenFileDialog(); // создаем объект диалогового окна
  199. OFD.ShowDialog(); // открываем диалоговое окно
  200. path = OFD.FileName; // извлекаем полный путь к картинке
  201. int n = path.IndexOf("images");
  202. path = "\\" + path.Substring(n); // записываем в бд путь, начиная с имени папки
  203. }
  204. catch
  205. {
  206. MessageBox.Show("Фото не добавлено");
  207. }
  208. }
  209. }
  210. }