123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- using System;
- using System.Linq;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Input;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- namespace MyTests.Pages
- {
- // Страница с редактированием/созданием теста
- public partial class EditTestPage : Page
- {
- Tests test;
- Questions selected;
- public EditTestPage(Tests _test = null)
- {
- InitializeComponent();
- if (_test == null) // Создание теста
- {
- try
- {
- // Получение максимального id теста и добавления к нему 1
- int testId = cdb.db.Tests.Select(p => p.IdTest).DefaultIfEmpty(0).Max() + 1;
- // Создание теста
- Tests newTest = new Tests()
- {
- IdTest = testId,
- IdUser = Session.User.IdUser,
- Name = $"Новый тест {cdb.db.Tests.Where(item => item.IdUser == Session.User.IdUser).Count() + 1}",
- IsAnswersVisible = false,
- IsVisible = false,
- CanAgain = false
- };
- // Добавление теста в базу данных
- cdb.db.Tests.Add(newTest);
- cdb.db.SaveChanges();
- // Выбор созданного теста
- test = cdb.db.Tests.Where(item => item.IdTest == testId).FirstOrDefault();
- }
- catch (Exception ex)
- {
- new ErrorWindow(ex.Message);
- }
- }
- else // Редактирование теста
- {
- test = _test; // Выбор теста
- // Замена состояний CheckBox
- IsVisibleCB.IsChecked = test.IsVisible;
- IsAnswersVisibleCB.IsChecked = test.IsAnswersVisible;
- CanAgainCB.IsChecked = test.CanAgain;
- }
- // Заполнение верхней панели
- TestNameBox.Text = test.Name; // Заполнение названия теста
- TestImg.Source = test.Image == null ? // Проверка на существование картинки у теста
- new BitmapImage(new Uri("../Resources/Approval.png", UriKind.RelativeOrAbsolute)) : // в базе данных. Если существует, то устанавливается на ту, что в базе данных
- ImagesFunctions.NewImage(_test); // Если не существует, то устанавливается стандартная
- // Очистка списка с вопросами
- QuestionsListBox.Items.Clear();
- // Вызов метода с обновлением вопросов
- QuestionsUpdate();
- }
- private void QuestionsUpdate()
- {
- // Заполнение списка с вопросами данными из базы данных
- QuestionsListBox.ItemsSource = cdb.db.Questions.Where(item => item.IdTest == test.IdTest).ToList();
- }
- private void QuestionsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- // Заполнение выбранного элемента списка с вопросамми
- selected = (Questions)QuestionsListBox.SelectedItem;
- }
- private void AddQuestionButton_Click(object sender, RoutedEventArgs e)
- {
- // Открытие окна с добавлением вопроса
- new QuestionAddToTestWindow(test).ShowDialog();
- // Вызов метода с обновлением вопросов
- QuestionsUpdate();
- }
- private void DeleteQuestionButton_Click(object sender, RoutedEventArgs e)
- {
- if (selected != null) // Проверка, выбран ли элемент списка с вопросами
- {
- // Открытие окна с подтверждением действия
- ConfirmationWindow confWindow = new ConfirmationWindow();
- confWindow.ShowDialog();
- if (confWindow.answer) // Если ответ "Да"
- {
- try
- {
- // Проход по всем ответам пользователей выбранного вопроса
- foreach (Answers answer in cdb.db.Answers.Where(item => item.IdQuestion == selected.IdQuestion))
- cdb.db.Answers.Remove(answer); // Удаление всех ответов пользователей, которые прошли этот вопрос.
- cdb.db.Questions.Remove(selected); // Удаление вопроса
- cdb.db.SaveChanges(); // Сохранение
- }
- catch (Exception ex)
- {
- new ErrorWindow(ex.Message); // Вывод ошибки, если она есть
- }
- }
- // Вызов метода с обновлением вопросов
- QuestionsUpdate();
- }
- }
- private void BackButton_Click(object sender, RoutedEventArgs e)
- {
- // Возврат на прошлую страницу
- NavigationService.GoBack();
- }
- private void TestImg_MouseDown(object sender, MouseButtonEventArgs e)
- {
- // Выбор картинки с компьютера пользователя
- BitmapImage image = ImagesFunctions.SelectImage();
- if (image != null) // Если картинка выбрана
- {
- TestImg.Source = image; // Замена картинки теста на выбранную
- test.Image = ImagesFunctions.BitmapSourceToByteArray((BitmapSource)TestImg.Source); // Замена картинки в базе данных в виде varbinary
- cdb.db.SaveChanges(); // Сохранение
- }
- }
- private void TestNameBox_LostFocus(object sender, RoutedEventArgs e)
- {
- test.Name = TestNameBox.Text; // Замена названия теста в базе данных на содержимое TestNameBox
- }
- private void SaveInfoCB(object sender, RoutedEventArgs e)
- {
- test.IsVisible = IsVisibleCB.IsChecked == true; // замена IsVisible в базе данных на содержимое IsVisibleCB
- test.IsAnswersVisible = IsAnswersVisibleCB.IsChecked == true; // замена IsAnswersVisible в базе данных на содержимое IsAnswersVisibleCB
- test.CanAgain = CanAgainCB.IsChecked == true; // замена CanAgain в базе данных на содержимое CanAgainCB
- cdb.db.SaveChanges(); // сохранение данных
- }
- }
- }
|