private void fillQAOld() { DB clone; bool cloned = false; if (inter.IdB.Topics.Count == 0) { clone = inter.IdB; } else { clone = new DB(); cloned = true; } DB.TAMQA.AnswersTableAdapter.Fill(clone.Answers); DB.TAMQA.QuestionsTableAdapter.Fill(clone.Questions); DB.TAMQA.TopicsTableAdapter.Fill(clone.Topics); if (cloned) { foreach (var item in clone.Topics) { inter.IdB.Topics.ImportRow(item); } DB.TAMQA.TopicsTableAdapter.Update(inter.IdB.Topics); foreach (var item in clone.Questions) { inter.IdB.Questions.ImportRow(item); DB.TAMQA.QuestionsTableAdapter.Update(inter.IdB.Questions); DB.QuestionsRow last = inter.IdB.Questions.Last(); AnswersRow[] answers = item.GetAnswersRows(); foreach (var a in answers) { inter.IdB.Answers.ImportRow(a); AnswersRow la = inter.IdB.Answers.Last(); la.QID = last.QID; } DB.TAMQA.AnswersTableAdapter.Update(inter.IdB.Answers); } } // DB.TAMQA.AnswersTableAdapter.Fill(inter.IdB.Answers); // DB.TAMQA.QuestionsTableAdapter.Fill(inter.IdB.Questions); DB.TAMQA.TopicsTableAdapter.Fill(inter.IdB.Topics); }
/* * public bool Working * { * * set * { * if (!value) * { * // Exam.CurrentChanged += Exam_CurrentChanged; * ExamsList.CurrentChanged += currentChanged; * // Student.CurrentChanged += Exam_CurrentChanged; * StudentsList.CurrentChanged += currentChanged; * Questions.CurrentChanged += currentChanged; * // Answers.CurrentChanged += Exam_CurrentChanged; * // Preferences.CurrentChanged += Exam_CurrentChanged; * LogPref.CurrentChanged += currentChanged; * // Order.CurrentChanged += Exam_CurrentChanged; * // Class.CurrentChanged += Exam_CurrentChanged; * // AYear.CurrentChanged += Exam_CurrentChanged; * * Topics.CurrentChanged += currentChanged; * } * else * { * // Exam.CurrentChanged += Exam_CurrentChanged; * ExamsList.CurrentChanged -= currentChanged; * // Student.CurrentChanged += Exam_CurrentChanged; * StudentsList.CurrentChanged -= currentChanged; * Questions.CurrentChanged -= currentChanged; * // Answers.CurrentChanged += Exam_CurrentChanged; * // Preferences.CurrentChanged += Exam_CurrentChanged; * LogPref.CurrentChanged -= currentChanged; * // Order.CurrentChanged += Exam_CurrentChanged; * // Class.CurrentChanged += Exam_CurrentChanged; * // AYear.CurrentChanged += Exam_CurrentChanged; * * Topics.CurrentChanged -= currentChanged; * } * } * } */ private void currentChanged(object sender, EventArgs e) { if (Working) { return; } try { // DataGridView dgv = sender as DataGridView; BindingSource bs = sender as BindingSource; if (bs.Current == null) { return; } DataRowView view = (bs.Current as DataRowView); DataRow row = view.Row; if (row == null) { return; } // byte[] auxiliar = null; if (sender.Equals(this.Topics)) { DB.TopicsRow r = row as DB.TopicsRow; DB.QuestionsDataTable dt = set.Questions; Questions.Filter = dt.TopicIDColumn.ColumnName + " = " + r.TopicID; } else if (sender.Equals(this.Questions)) { DB.QuestionsRow r = row as DB.QuestionsRow; string dt = set.Answers.QIDColumn.ColumnName; Answers.Filter = dt + " = " + r.QID; } else if (sender.Equals(this.RandomQuestions)) { DB.QuestionsRow r = row as DB.QuestionsRow; string dt = auxiliar.Answers.QIDColumn.ColumnName; RandomAnswers.Filter = dt + " = " + r.QID; } else if (sender.Equals(this.Exam)) { string dt = auxiliar.Questions.QIDColumn.ColumnName; DB.ExamsRow r = row as DB.ExamsRow; // string[] aux = r.AIDString.Split(','); RandomQuestions.Position = RandomQuestions.Find(dt, r.QID); Questions.Position = Questions.Find(dt, r.QID); } else if (sender.Equals(this.StudentsList)) { DB.StuListRow r = row as DB.StuListRow; DB.StudentDataTable dt = set.Student; Student.Filter = dt.EIDColumn.ColumnName + " = " + r.SLID; // DB.TAM.ExamsTableAdapter.FillByEID(dt, r.EID); } else if (sender.Equals(this.ExamsList)) { DB.ExamsListRow r = row as DB.ExamsListRow; // DB.ExamsDataTable dt = set.Exams; Exam.Filter = auxiliar.Exams.EIDColumn.ColumnName + " = " + r.EID; Working = true; auxiliar.PopulateExamQuestions(ref r); Working = false; Exam.MoveFirst(); } else if (sender.Equals(this.LogPref)) { DB.PreferencesRow r = row as DB.PreferencesRow; DB.ExamsListDataTable dt = set.ExamsList; ExamsList.Filter = dt.PIDColumn.ColumnName + " = " + r.PID; DB.TAM.ExamsListTableAdapter.FillByPID(dt, r.PID); /* * if (!r.IsELDataNull()) * { * // string pid = ExasmPath + r.PID.ToString() + ".xml"; * auxiliar = r.ELData; * Tables.ReadDTBytes(ExasmPath,ref auxiliar, ref dt); * } * else * { * DB.TAM.ExamsListTableAdapter.FillByPID(dt, r.PID); * // MakeTableBytes(ref r); * } */ } } catch (SystemException ex) { } }
/// <summary> /// MAIN FILE FOR GENERATING AN EXAM /// </summary> /// <param name="p"></param> private ExamsListRow doOneExam(ref PreferencesRow p) { inter.Status = Resources.Creando + inter.IdB.Questions.Count + Resources.PregAleatorias; Func <DB.QuestionsRow, bool> selector = x => { bool?ok = x.TopicsRow?.UseIt; if (ok == null) { ok = false; } return((bool)ok); }; ///RANDOMNIZE RAW QUESTIONS IEnumerable <DB.QuestionsRow> questions = inter.IdB.Questions.Where(selector).ToArray(); //toma todas las preguntas if (questions.Count() == 0) { inter.Status = "No hay preguntas seleccionadas"; return(null); } int times = 3; questions = Tools.RandomnizeStringsTimes(questions, times); IList <ExamsRow> exams = new List <ExamsRow>(); //todas las preguntas randomnizadas seran guardadas primero en esta lista foreach (QuestionsRow q in questions) { ExamsRow er = inter.IdB.Exams.NewExamsRow(); //crea rows pero no los metas en la tabla er.QID = q.QID; //dales el id de la pregunta exams.Add(er); //agregalos a la lista } inter.Status = Resources.Filtrando; IEnumerable <ExamsRow> join = weightThem(ref p, ref exams); //not re-ordered // preguntas seleccionadas y filtradas Application.DoEvents(); inter.Status = Resources.OrderAleatorio; // de las preguntas del examen ya pesadas (filtradaS) join = Tools.RandomnizeStringsTimes(join, times); inter.Status = Resources.Seleccionando + join.Count() + Resources.PregAleatorias; Application.DoEvents(); foreach (ExamsRow ex in join) { inter.IdB.Exams.AddExamsRow(ex); //agregalas a la tabla para salvarlas DB.QuestionsRow q = ex.QuestionsRow; IEnumerable <AnswersRow> answ = q.GetAnswersRows(); ///RANDOMIZE RAW ASWERS answ = Tools.RandomnizeStringsTimes(answ, times); //CREATE EXAM QUESTION CODE! AIDSTRING string code = CreateExamQuestionCode(ref answ); ex.AIDString = code; ExamsRow auxiliar = ex; MakeTableBytes(ref auxiliar, examsPath); } DB.TAM.ExamsTableAdapter.Update(inter.IdB.Exams); Application.DoEvents(); ExamsListRow ls = inter.IdB.AddExam(ref p); // Image img = Tools.CreateQRCode(ls.GUID, qrSizeDB); ls.QRCode = Tools.imageToByteArray(img); DB.TAM.ExamsListTableAdapter.Update(inter.IdB.ExamsList); Application.DoEvents(); //este orden es importante foreach (DB.ExamsRow re in join) { re.EID = ls.EID; //ahora asocia las preguntas a cada examen generado } DB.TAM.ExamsTableAdapter.Update(inter.IdB.Exams); Application.DoEvents(); return(ls); }