123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- using Microsoft.Win32;
- 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 CatProject
- {
- enum StateOfPage { Create, Update };
- /// <summary>
- /// Логика взаимодействия для AddPage.xaml
- /// </summary>
- public partial class AddPage : Page
- {
- string path; // переменная для хранения пути к фото кота
- StateOfPage stateOfPage; // перечисление для создания флага о том, создаем нового кота или редактируем старого
- CatTable cat = new CatTable(); // создаем объект для кота
- void addList() // метод для заполнения списков
- {
- // список с породами
- CBBreed.ItemsSource = BaseClass.BaseConnect.BreedTable.ToList();
- CBBreed.DisplayMemberPath = "Breed";
- CBBreed.SelectedValuePath = "idBreed";
- // список с чертами характера
- LBTrait.ItemsSource = BaseClass.BaseConnect.TraitTable.ToList();
- LBTrait.DisplayMemberPath = "Trait";
- LBTrait.SelectedValuePath = "idTrait";
- // список с кормами для кота
- LBFeed.ItemsSource = BaseClass.BaseConnect.Feedtable.ToList();
- }
- // конструктор для создания нового кота (без аргументов)
- public AddPage()
- {
- InitializeComponent();
- addList();
- stateOfPage = StateOfPage.Create;
- }
- // конструктор для редактирования данных о коте ( с аргументом, который хранит id кота, которого хотим отредактировать)
- public AddPage(int index)
- {
- InitializeComponent();
- BtnAdd.Content = "Внести изменения"; // изменили текст в кнопке
- addList(); // заполняем списки
- stateOfPage = StateOfPage.Update; // флаг, что редактирум кота (созданный через перечисление)
- cat = BaseClass.BaseConnect.CatTable.FirstOrDefault(x => x.idCat == index); // ищем в базе кота по id
- TBName.Text = cat.CatName; // вывод имени кота
- BreedTable breed = BaseClass.BaseConnect.BreedTable.FirstOrDefault(x => x.idBreed == cat.idBreed); // поиск породы кота
- CBBreed.SelectedItem = breed; // вывод породы кота
- DPBirthday.SelectedDate = cat.Birthday; // вывод даты рождения
- switch (cat.idGender) // вывод пола кота
- {
- case 1:
- RBMen.IsChecked = true;
- break;
- case 2:
- RBWomen.IsChecked = true;
- break;
- }
- TBPassport.Text = cat.PasssportTable.UniqueNumber.ToString(); // вывод паспорта
- TBColor.Text = cat.PasssportTable.Color; // вывод окраса
- // находим черты характера того кота, которого мы редактируем:
- List<TraitCatTable> TC = BaseClass.BaseConnect.TraitCatTable.Where(x => x.idCat == cat.idCat).ToList();
- // цикл для выделения черт характера кота в общем списке:
- foreach (TraitTable t in LBTrait.Items)
- {
- if (TC.FirstOrDefault(x => x.idTrait == t.idTrait) != null)
- {
- LBTrait.SelectedItems.Add(t);
- }
- }
- // находим корма для того кота, которого мы редактируем
- List<feedCatTable> FC = BaseClass.BaseConnect.feedCatTable.Where(x => x.idCat == cat.idCat).ToList();
- // цикл для отображения кормов и их количества для кота:
- foreach (Feedtable t in LBFeed.Items)
- {
- feedCatTable f = FC.FirstOrDefault(x => x.idFeed == t.idFeed);
- if (f != null)
- {
- t.NumFeed = f.Count;
- }
- }
- }
- private void BtnAdd_Click(object sender, RoutedEventArgs e)
- {
- try
- {
- int gender = 0;
- if (RBMen.IsChecked == true)
- {
- gender = 1;
- }
- if (RBWomen.IsChecked == true)
- {
- gender = 2;
- }
- // заполняем поля таблицы CatTable
- cat.CatName = TBName.Text;
- cat.idBreed = ((BreedTable)CBBreed.SelectedItem).idBreed;
- cat.Birthday = DPBirthday.DisplayDate.Date;
- cat.idGender = gender;
- cat.Photo = path;
- if (stateOfPage == StateOfPage.Create) // если значение перечисления означает "Добавить кота", то добавляем объект в базу
- {
- BaseClass.BaseConnect.CatTable.Add(cat);
- }
- // проверяем, есть ли в базе данные о паспорте кота, если есть то удаляем эти данные
- PasssportTable PT = BaseClass.BaseConnect.PasssportTable.FirstOrDefault(x => x.idCat == cat.idCat);
- if (PT != null)
- {
- BaseClass.BaseConnect.PasssportTable.Remove(PT);
- }
- // формируем новый объект с данными паспорта кота
- PasssportTable pas = new PasssportTable()
- {
- idCat = cat.idCat,
- UniqueNumber = TBPassport.Text,
- Color = TBColor.Text
- };
- BaseClass.BaseConnect.PasssportTable.Add(pas); // добавляем объект в базу
- // Для заполнения таблицы TraitCatTable нужно организовать цикл, так как черт характера у кота может быть несколько
- // Цикл будет организовывать по чертам характера, которые выделены в списке
- // находим в базе список черт характера кота:
- List<TraitCatTable> listTraitCat = BaseClass.BaseConnect.TraitCatTable.Where(x => x.idCat == cat.idCat).ToList();
- // если список не пустой, удаляем из него все черты характера этого кота
- if (listTraitCat.Count > 0)
- {
- foreach (TraitCatTable t in listTraitCat)
- {
- BaseClass.BaseConnect.TraitCatTable.Remove(t);
- }
- }
- // перезаписываем черты кота (или добавляем черты для нового кота)
- foreach (TraitTable t in LBTrait.SelectedItems)
- {
- TraitCatTable TCT = new TraitCatTable()
- {
- idCat = cat.idCat,
- idTrait = t.idTrait,
- };
- BaseClass.BaseConnect.TraitCatTable.Add(TCT);
- }
- // Для заполнения таблицы feedCatTable нужно организовать цикл, так как кормов у кота может быть несколько
- // Цикл будет организовывать по всем кормам, которые есть в списке
- // находим список с кормами для кота
- List<feedCatTable> listFeedCat = BaseClass.BaseConnect.feedCatTable.Where(x => x.idCat == cat.idCat).ToList();
- // если список не пустой, удаляем из него все корма для этого кота
- if (listFeedCat.Count > 0)
- {
- foreach (feedCatTable t in listFeedCat)
- {
- BaseClass.BaseConnect.feedCatTable.Remove(t);
- }
- }
- // перезаписываем корма для кота (или добавляем корма для нового кота)
- foreach (Feedtable f in LBFeed.Items)
- {
- if (f.NumFeed > 0)
- {
- feedCatTable FCT = new feedCatTable()
- {
- idCat = cat.idCat,
- idFeed = f.idFeed,
- Count = f.NumFeed
- };
- BaseClass.BaseConnect.feedCatTable.Add(FCT);
- }
- }
- BaseClass.BaseConnect.SaveChanges(); // сохраняем все внесенные изменения в базе данных
- if (stateOfPage == StateOfPage.Create)
- {
- MessageBox.Show("Кот добавлен");
- }
- else
- {
- MessageBox.Show("Изменения о коте внесены");
- }
- FrameClass.MainFrame.Navigate(new CatViewPage());
- }
- catch
- {
- MessageBox.Show("Что-то пошло не так");
- System.Windows.Application.Current.Shutdown();
- }
- }
- private void AddPhotoCat_Click(object sender, RoutedEventArgs e) // добавление фото кота с помощью диалогового окна
- {
- try
- {
- OpenFileDialog OFD = new OpenFileDialog(); // создаем объект диалогового окна
- OFD.ShowDialog(); // открываем диалоговое окно
- path = OFD.FileName; // извлекаем полный путь к картинке
- int n = path.IndexOf("images");
- path = "\\" + path.Substring(n); // записываем в бд путь, начиная с имени папки
- }
- catch
- {
- MessageBox.Show("Фото не добавлено");
- }
- }
- }
- }
|