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