Esempio n. 1
0
 public Subject(Subject copy)
 {
     ID = copy.ID;
     Title = copy.Title;
     Description = copy.Description;
     PathToPdf = copy.PathToPdf;
     Documents = copy.Documents;
 }
 public void Delete(Subject subject)
 {
     using (var conn = sqlConnection.Connection)
     {
         conn.Open();
         if (subject.Questions != null)
         {
             foreach (var question in subject.Questions)
             {
                 if (question.Answers != null)
                 {
                     foreach (var answer in question.Answers)
                     {
                         answerDao.Delete(conn, answer.ID);
                     }
                 }
                 questionDao.Delete(conn, question.ID);
             }
         }
         subjectDao.Delete(conn, subject.ID);
     }
 }
 /// <summary>
 /// Сохраняет изменения в таблице тем
 /// </summary>
 /// <param name="subject">тема</param>
 public void SaveOrUpdate(SQLiteConnection conn, Subject subject)
 {
     if (subject.ID == 0)
     {
         int ID = indexService.NextID(Subject.TABLE_NAME);
         string sql = string.Format(insertIntoSql, Subject.TABLE_NAME, ID, subject.Title, subject.Description,
             subject.PathToPdf, subject.Documents);
         ExecuteNonQuery(conn, sql);
         subject.ID = ID;
     }
     else
     {
         using (SQLiteCommand insertSQL = new SQLiteCommand("UPDATE SUBJECTS SET Title = @Title, Description = @Description, PathToPdf = @PathToPdf, Documents = @Documents WHERE ID = @ID", conn))
         {
             insertSQL.Parameters.AddWithValue("@Title", subject.Title);
             insertSQL.Parameters.AddWithValue("@Description", subject.Description);
             insertSQL.Parameters.AddWithValue("@PathToPdf", subject.PathToPdf);
             insertSQL.Parameters.AddWithValue("@Documents", subject.Documents);
             insertSQL.Parameters.AddWithValue("@ID", subject.ID);
             insertSQL.ExecuteNonQuery();
         }
     }
 }
 /// <summary>
 /// Сохраняет в БД тему и все ее вопросы и ответы к каждому вопросу
 /// </summary>
 /// <param name="subject">тема для сохранения</param>
 public void SaveOrUpdate(Subject subject)
 {
     using (var conn = sqlConnection.Connection)
     {
         conn.Open();
         //сначало сохраним тему
         subjectDao.SaveOrUpdate(conn, subject);
         if (subject.Questions != null)
         {
             foreach (var question in subject.Questions) //потом сохраняем каждый вопрос поотдельности
             {
                 questionDao.SaveOrUpdate(conn, question);
                 if (question.Answers != null)
                 {
                     foreach (var answer in question.Answers) // потом сохраняем каждый ответ поотдельности
                     {
                         answerDao.SaveOrUpdate(conn, answer);
                     }
                 }
             }
         }
     }
 }
 private void SaveSubject(Subject oldSubject, TreeNode SelectedNode)
 {
     Subject newSubject = null;
     if (subjectForSave.ContainsKey(oldSubject.ID))
     {
         newSubject = subjectForSave[oldSubject.ID];
     }
     if (newSubject != null)
     {
         try
         {
             if (!oldSubject.PathToPdf.Equals(newSubject.PathToPdf))
             {
                 FileService.Delete(oldSubject.PathToPdf);
                 newSubject.PathToPdf = FileService.Load(newSubject.PathToPdf);
             }
             if (!oldSubject.Documents.Equals(newSubject.Documents))
             {
                 FileService.Delete(oldSubject.Documents);
                 newSubject.Documents = FileService.Load(newSubject.Documents);
             }
             subjectService.SaveOrUpdate(newSubject);
             newSubject.Questions = oldSubject.Questions;
             SelectedNode.Tag = newSubject;
             SelectedNode.Text = newSubject.Title;
             subjectForSave.Remove(newSubject.ID);
         }
         catch (Exception ex)
         {
             MyMessage.Error(ex.Message, "Неизвестная ошибка");
         }
     }
 }
 private void CheckForChanges()
 {
     //если выбран элемент дерева
     if (treeView_Subjects.SelectedNode != null)
     {
         var SelectedNode = treeView_Subjects.SelectedNode;
         //если это тема
         if (SelectedNode.Tag is Subject)
         {
             //получим текущею тему
             var subject = (Subject)SelectedNode.Tag;
             Subject newSubject = null;
             //поиск этой темы в массиве для сохранения
             if (subjectForSave.ContainsKey(subject.ID))
             {
                 newSubject = subjectForSave[subject.ID];
             }
             bool changed = false;
             //проверям на изменения заголовка
             if (!subject.Title.Equals(tbSubjectTitle.Text))
             {
                 SelectedNode.Text = string.Format("{0}*", tbSubjectTitle.Text);
                 if (newSubject == null)
                 {
                     newSubject = new Subject(subject);
                     subjectForSave.Add(newSubject.ID, newSubject);
                 }
                 tsbSaveCurrent.Enabled = true;
                 newSubject.Title = tbSubjectTitle.Text;
                 changed = true;
             }
             //проверя на изменение главного документа
             if (tbPdfPath.Tag != null && !((string)tbPdfPath.Tag).Equals(subject.PathToPdf))
             {
                 SelectedNode.Text = string.Format("{0}*", tbSubjectTitle.Text);
                 if (newSubject == null)
                 {
                     newSubject = new Subject(subject);
                     subjectForSave.Add(newSubject.ID, newSubject);
                 }
                 tsbSaveCurrent.Enabled = true;
                 newSubject.PathToPdf = (string)tbPdfPath.Tag;
                 changed = true;
             }
             if (tbMatherialPath.Tag != null && !((string)tbMatherialPath.Tag).Equals(subject.Documents))
             {
                 SelectedNode.Text = string.Format("{0}*", tbSubjectTitle.Text);
                 if (newSubject == null)
                 {
                     newSubject = new Subject(subject);
                     subjectForSave.Add(newSubject.ID, newSubject);
                 }
                 tsbSaveCurrent.Enabled = true;
                 newSubject.Documents = (string)tbMatherialPath.Tag;
                 changed = true;
             }
             if (CheckNew(subject))
             {
                 SelectedNode.Text = string.Format("{0}*", tbSubjectTitle.Text);
                 if (newSubject == null)
                 {
                     newSubject = new Subject(subject);
                     subjectForSave.Add(newSubject.ID, newSubject);
                 }
                 tsbSaveCurrent.Enabled = true;
                 changed = true;
             }
             if (!changed)
             {
                 //если ничего не изменено удаляем тему из массива на сохранение
                 SelectedNode.Text = tbSubjectTitle.Text;
                 if (newSubject != null)
                 {
                     subjectForSave.Remove(newSubject.ID);
                 }
                 tsbSaveCurrent.Enabled = false;
             }
         }
         tsbSaveAll.Enabled = subjectForSave.Count != 0;
     }
 }
 private bool CheckNew(Subject subject)
 {
     bool result = false;
     if (subject.Questions != null)
         foreach (var question in subject.Questions)
         {
             if (question.ID == 0)
             {
                 result = true;
                 break;
             }
         }
     return result;
 }
 private void toolStripSplitButton1_ButtonClick(object sender, EventArgs e)
 {
     string title = "Новая тема";
     if (InputBox.Show("Создание новой темы", "Название темы:", ref title) == DialogResult.OK)
     {
         try
         {
             Subject newSubject = new Subject();
             newSubject.Title = title;
             subjectService.SaveOrUpdate(newSubject);
             TreeNode nodeSubject = new TreeNode();
             nodeSubject.Text = newSubject.Title;
             nodeSubject.Tag = newSubject;
             treeView_Subjects.Nodes.Add(nodeSubject);
             treeView_Subjects.SelectedNode = nodeSubject;
         }
         catch (Exception ex)
         {
             MyMessage.Error(ex.Message, "Неизвестная ошибка");
         }
     }
 }
 /// <summary>
 /// Преобразует ответ SQL в тему
 /// </summary>
 /// <param name="reader">ответ SQL</param>
 /// <returns>тема</returns>
 private Subject ToSubject(SQLiteDataReader reader)
 {
     Subject answer = new Subject();
     answer.ID = Convert.ToInt32(reader["ID"]);
     answer.Title = Convert.ToString(reader["Title"]);
     answer.Description = Convert.ToString(reader["Description"]);
     answer.PathToPdf = Convert.ToString(reader["PathToPdf"]);
     answer.Documents = Convert.ToString(reader["Documents"]);
     return answer;
 }
        /*

        /// <summary>
        /// Находит все вопросы по теме и вставляет в тему
        /// </summary>
        /// <param name="subject">тема по которой необходимо найти вопросы</param>
        public void FindAllQuestionBySubject(Subject subject)
        {
            using (var conn = sqlConnection.Connection)
            {
                FindAllQuestionBySubject(conn, subject);
            }
        }

        */

        private void FindAllQuestionBySubject(SQLiteConnection conn, Subject subject)
        {
            subject.Questions = questionDao.FindAllBySubjectID(conn, subject.ID);
            foreach (var question in subject.Questions)
            {
                question.Subject = subject;
                question.Answers = answerDao.FindAllByQuestionID(conn, question.ID);
                foreach (var answer in question.Answers)
                {
                    answer.Question = question;
                }
            }
        }