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();
}
}
}