CurTestPage.xaml.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System;
  2. using System.Linq;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using System.Windows.Navigation;
  6. namespace MyTests.Pages
  7. {
  8. // Страница с прохождением теста
  9. public partial class CurTestPage : Page
  10. {
  11. public CurTestPage()
  12. {
  13. InitializeComponent();
  14. // Заполнение вопроса из массива Content в файле-классе Session
  15. QuestionBox.Text = Session.Quest.Content[Session.CurQuestion];
  16. }
  17. private void NextButton_Click(object sender, RoutedEventArgs e)
  18. {
  19. try
  20. {
  21. // Создание переменной с вопросом из массива Content файла-класса Session
  22. string strContent = Session.Quest.Content[Session.CurQuestion];
  23. // Создание переменной с ответами из массива Answer файла-класса Session
  24. string strAnswer = Session.Quest.Answer[Session.CurQuestion];
  25. // Замена ответа пользователя в базе данных, если пользователь уже проходил этот тест
  26. if (cdb.db.Answers.Select(item => item.IdQuestion + " " + item.IdUser).Contains(cdb.db.Questions.Where(item => item.Content == strContent && item.Answer == strAnswer).Select(item => item.IdQuestion).FirstOrDefault() + " " + Session.User.IdUser))
  27. {
  28. Answers answer = cdb.db.Answers.Where(item => item.IdQuestion == cdb.db.Questions.Where(i => i.Content == strContent && i.Answer == strAnswer).Select(i => i.IdQuestion).FirstOrDefault() && item.IdUser == Session.User.IdUser).FirstOrDefault();
  29. answer.Answer = AnswerBox.Text;
  30. cdb.db.SaveChanges();
  31. }
  32. else // Сохранение ответа пользователя, если он еще не проходил этот тест
  33. {
  34. Answers newAnswer = new Answers()
  35. {
  36. IdUserAnswer = cdb.db.Answers.Select(p => p.IdUserAnswer).DefaultIfEmpty(0).Max() + 1,
  37. IdQuestion = cdb.db.Questions.Where(item => item.Content == strContent && item.Answer == strAnswer).Select(item => item.IdQuestion).FirstOrDefault(),
  38. IdUser = Session.User.IdUser,
  39. Answer = AnswerBox.Text
  40. };
  41. cdb.db.Answers.Add(newAnswer);
  42. cdb.db.SaveChanges();
  43. }
  44. }
  45. catch (Exception ex)
  46. {
  47. new ErrorWindow(ex.Message).ShowDialog(); // Вывод ошибки, если она есть
  48. }
  49. // Добавление баллов в переменную Points файла-класса Session, если ответ правильный
  50. if (AnswerBox.Text.ToLower().Trim() == Session.Quest.Answer[Session.CurQuestion].ToLower().Trim())
  51. Session.Points++;
  52. // Если пройдены все вопросы, то переход к странице с результатами
  53. if (Session.CurQuestion >= Session.OpenedTest.Questions.Count() - 1)
  54. NavigationService.Navigate(new Pages.ResultTestPage());
  55. else // Если еще остались вопросы, то переход к следующему вопросу
  56. {
  57. Session.CurQuestion++; // Номер вопроса прибавляется на 1
  58. NavigationService.Navigate(new Pages.CurTestPage());
  59. }
  60. }
  61. }
  62. }