EditTestPage.xaml.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using System;
  2. using System.Linq;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using System.Windows.Input;
  6. using System.Windows.Media.Imaging;
  7. using System.Windows.Navigation;
  8. namespace MyTests.Pages
  9. {
  10. // Страница с редактированием/созданием теста
  11. public partial class EditTestPage : Page
  12. {
  13. Tests test;
  14. Questions selected;
  15. public EditTestPage(Tests _test = null)
  16. {
  17. InitializeComponent();
  18. if (_test == null) // Создание теста
  19. {
  20. try
  21. {
  22. // Получение максимального id теста и добавления к нему 1
  23. int testId = cdb.db.Tests.Select(p => p.IdTest).DefaultIfEmpty(0).Max() + 1;
  24. // Создание теста
  25. Tests newTest = new Tests()
  26. {
  27. IdTest = testId,
  28. IdUser = Session.User.IdUser,
  29. Name = $"Новый тест {cdb.db.Tests.Where(item => item.IdUser == Session.User.IdUser).Count() + 1}",
  30. IsAnswersVisible = false,
  31. IsVisible = false,
  32. CanAgain = false
  33. };
  34. // Добавление теста в базу данных
  35. cdb.db.Tests.Add(newTest);
  36. cdb.db.SaveChanges();
  37. // Выбор созданного теста
  38. test = cdb.db.Tests.Where(item => item.IdTest == testId).FirstOrDefault();
  39. }
  40. catch (Exception ex)
  41. {
  42. new ErrorWindow(ex.Message);
  43. }
  44. }
  45. else // Редактирование теста
  46. {
  47. test = _test; // Выбор теста
  48. // Замена состояний CheckBox
  49. IsVisibleCB.IsChecked = test.IsVisible;
  50. IsAnswersVisibleCB.IsChecked = test.IsAnswersVisible;
  51. CanAgainCB.IsChecked = test.CanAgain;
  52. }
  53. // Заполнение верхней панели
  54. TestNameBox.Text = test.Name; // Заполнение названия теста
  55. TestImg.Source = test.Image == null ? // Проверка на существование картинки у теста
  56. new BitmapImage(new Uri("../Resources/Approval.png", UriKind.RelativeOrAbsolute)) : // в базе данных. Если существует, то устанавливается на ту, что в базе данных
  57. ImagesFunctions.NewImage(_test); // Если не существует, то устанавливается стандартная
  58. // Очистка списка с вопросами
  59. QuestionsListBox.Items.Clear();
  60. // Вызов метода с обновлением вопросов
  61. QuestionsUpdate();
  62. }
  63. private void QuestionsUpdate()
  64. {
  65. // Заполнение списка с вопросами данными из базы данных
  66. QuestionsListBox.ItemsSource = cdb.db.Questions.Where(item => item.IdTest == test.IdTest).ToList();
  67. }
  68. private void QuestionsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  69. {
  70. // Заполнение выбранного элемента списка с вопросамми
  71. selected = (Questions)QuestionsListBox.SelectedItem;
  72. }
  73. private void AddQuestionButton_Click(object sender, RoutedEventArgs e)
  74. {
  75. // Открытие окна с добавлением вопроса
  76. new QuestionAddToTestWindow(test).ShowDialog();
  77. // Вызов метода с обновлением вопросов
  78. QuestionsUpdate();
  79. }
  80. private void DeleteQuestionButton_Click(object sender, RoutedEventArgs e)
  81. {
  82. if (selected != null) // Проверка, выбран ли элемент списка с вопросами
  83. {
  84. // Открытие окна с подтверждением действия
  85. ConfirmationWindow confWindow = new ConfirmationWindow();
  86. confWindow.ShowDialog();
  87. if (confWindow.answer) // Если ответ "Да"
  88. {
  89. try
  90. {
  91. // Проход по всем ответам пользователей выбранного вопроса
  92. foreach (Answers answer in cdb.db.Answers.Where(item => item.IdQuestion == selected.IdQuestion))
  93. cdb.db.Answers.Remove(answer); // Удаление всех ответов пользователей, которые прошли этот вопрос.
  94. cdb.db.Questions.Remove(selected); // Удаление вопроса
  95. cdb.db.SaveChanges(); // Сохранение
  96. }
  97. catch (Exception ex)
  98. {
  99. new ErrorWindow(ex.Message); // Вывод ошибки, если она есть
  100. }
  101. }
  102. // Вызов метода с обновлением вопросов
  103. QuestionsUpdate();
  104. }
  105. }
  106. private void BackButton_Click(object sender, RoutedEventArgs e)
  107. {
  108. // Возврат на прошлую страницу
  109. NavigationService.GoBack();
  110. }
  111. private void TestImg_MouseDown(object sender, MouseButtonEventArgs e)
  112. {
  113. // Выбор картинки с компьютера пользователя
  114. BitmapImage image = ImagesFunctions.SelectImage();
  115. if (image != null) // Если картинка выбрана
  116. {
  117. TestImg.Source = image; // Замена картинки теста на выбранную
  118. test.Image = ImagesFunctions.BitmapSourceToByteArray((BitmapSource)TestImg.Source); // Замена картинки в базе данных в виде varbinary
  119. cdb.db.SaveChanges(); // Сохранение
  120. }
  121. }
  122. private void TestNameBox_LostFocus(object sender, RoutedEventArgs e)
  123. {
  124. test.Name = TestNameBox.Text; // Замена названия теста в базе данных на содержимое TestNameBox
  125. }
  126. private void SaveInfoCB(object sender, RoutedEventArgs e)
  127. {
  128. test.IsVisible = IsVisibleCB.IsChecked == true; // замена IsVisible в базе данных на содержимое IsVisibleCB
  129. test.IsAnswersVisible = IsAnswersVisibleCB.IsChecked == true; // замена IsAnswersVisible в базе данных на содержимое IsAnswersVisibleCB
  130. test.CanAgain = CanAgainCB.IsChecked == true; // замена CanAgain в базе данных на содержимое CanAgainCB
  131. cdb.db.SaveChanges(); // сохранение данных
  132. }
  133. }
  134. }