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 { /// /// Логика взаимодействия для CatViewPage.xaml /// public partial class CatViewPage : Page { public CatViewPage() { InitializeComponent(); CatList.ItemsSource = BaseClass.BaseConnect.CatTable.ToList(); // передаем записи из таблицы БД ListView List breedList = BaseClass.BaseConnect.BreedTable.ToList(); // программное заполнение выпадающего списка CBFilterBreed.Items.Add("Все породы"); // первый элемент выпадающего списка, который сбрасывает фильтрацию foreach (BreedTable breed in breedList) // цикл для записи в выпадающий список всех пород котов из БД { CBFilterBreed.Items.Add(breed.Breed); // выбранное по умолчанию значение в списке с породами котов ("Все породы") } CBFilterBreed.SelectedIndex = 0; } void Filter() // метод для одновременной фильтрации, поиска и сортировки { List catFilter = new List(); // пустой список, который далее будет заполнять элементами, удавлетворяющими условиям фильтрации, поиска и сортировки string breed = CBFilterBreed.SelectedValue.ToString(); // выбранное пользователем название породы // поиск значений, удовлетворяющих условия фильтра if (CBFilterBreed.SelectedIndex!=0) { catFilter = BaseClass.BaseConnect.CatTable.Where(x => x.BreedTable.Breed == breed).ToList(); } else { catFilter = BaseClass.BaseConnect.CatTable.ToList(); // если выбран пункт "Все породы", то сбрасываем фильтрацию: } // поиск совпадений по именам котов if (!string.IsNullOrWhiteSpace(TBSearch.Text)) // если строка не пустая и если она не состоит из пробелов { catFilter =catFilter.Where(x => x.CatName.ToLower().Contains(TBSearch.Text.ToLower())).ToList(); } // выбор только котов-мальчиков if (CBOnly.IsChecked==true) { catFilter = catFilter.Where(x => x.idGender == 1).ToList(); } // сортировка if (RBUp.IsChecked==true) // позрастанию имени { catFilter.Sort((x,y)=>x.CatName.CompareTo(y.CatName)); } if (RBDown.IsChecked==true) // по убыванию имени { catFilter.Sort((x, y) => x.CatName.CompareTo(y.CatName)); catFilter.Reverse(); } CatList.ItemsSource = catFilter; } private void TextBlock_Loaded(object sender, RoutedEventArgs e) // загрузка черт характера { TextBlock tb = (TextBlock)sender; // получаем доступ к TextBlock из шаблона int index = Convert.ToInt32(tb.Uid); // получаем числовой Uid элемента списка (в разметке предварительно нужно связать номер ячейки с номером кота в базе данных) // ищем в таблице, где хранятся черты характера котов те записи, которые соответсвуют определенному коту List TCT = BaseClass.BaseConnect.TraitCatTable.Where(x => x.idCat == index).ToList(); string str = ""; // выписывам все черты характера в переменную foreach (TraitCatTable t in TCT) { str += t.TraitTable.Trait + ", "; } if (str!="") tb.Text = str.Substring(0, str.Length - 2); } private void TextBlock_Loaded_1(object sender, RoutedEventArgs e) // загрузка информации о том, сколько будет денег тратиться на кота { TextBlock tb = (TextBlock)sender; // получаем доступ к TextBlock из шаблона int index = Convert.ToInt32(tb.Uid); // получаем числовой Uid элемента списка (в разметке предварительно нужно связать номер ячейки с номером кота в базе данных) // ищем в таблице, где хранятится информация о кормах для кота, которые соответсвуют определенному коту List FCT = BaseClass.BaseConnect.feedCatTable.Where(x => x.idCat == index).ToList(); int sum = 0; // вычисляем общее количестов денег на кота, для этого умножаем количество корма на цену корма foreach (feedCatTable t in FCT) { sum += t.Feedtable.Price * t.Count; } tb.Text = "Трата на кота: " + sum.ToString(); } private void AddCat_Click(object sender, RoutedEventArgs e) { FrameClass.MainFrame.Navigate(new AddPage()); } private void Button_Click(object sender, RoutedEventArgs e) { Button tb = (Button)sender; // получаем доступ к TextBlock из шаблона int index = Convert.ToInt32(tb.Uid); // получаем числовой Uid элемента списка (в разметке предварительно нужно связать номер ячейки с номером кота в базе данных) FrameClass.MainFrame.Navigate(new AddPage(index)); } private void Button_Click_1(object sender, RoutedEventArgs e) // удаление кота { Button tb = (Button)sender; // получаем доступ к TextBlock из шаблона int index = Convert.ToInt32(tb.Uid); // получаем числовой Uid элемента списка (в разметке предварительно нужно связать номер ячейки с номером кота в базе данных) CatTable catRemove = BaseClass.BaseConnect.CatTable.FirstOrDefault(x=>x.idCat == index); switch(MessageBox.Show("Удалить кота???", "RemoveCat", MessageBoxButton.YesNo, MessageBoxImage.Question)) { case MessageBoxResult.Yes: BaseClass.BaseConnect.CatTable.Remove(catRemove); MessageBox.Show("Кот удален"); BaseClass.BaseConnect.SaveChanges(); FrameClass.MainFrame.Navigate(new CatViewPage()); break; case MessageBoxResult.No: MessageBox.Show("Кот не удален"); break; } } // далее во всех обработчиках событий применяем один и тот же метод Filter, который позволяет находить условия, удовлетворяющие всем сразу выбранным параметрам private void TBSearch_TextChanged(object sender, TextChangedEventArgs e) { Filter(); } private void CBFilterBreed_SelectionChanged(object sender, SelectionChangedEventArgs e) { Filter(); } private void CBOnly_Checked(object sender, RoutedEventArgs e) { Filter(); } private void CBOnly_Unchecked(object sender, RoutedEventArgs e) { Filter(); } private void RBUp_Checked(object sender, RoutedEventArgs e) { Filter(); } private void BtnAuto_Click(object sender, RoutedEventArgs e) // авторизация { WindowAuto windowAuto = new WindowAuto(); windowAuto.ShowDialog(); } } }