void saveQuizz() { var context = new QuizzDb(); // Uv db c'est la classe qui correspond à la table en bd List <Question> questions = new List <Question>(); AnswereType answereType; Question question; foreach (QuestionQuizzForm q in Panel2.Controls.OfType <QuestionQuizzForm>()) { string name = ""; List <Answer> answeres = new List <Answer>(); answereType = AnswereType.QCM; foreach (AnswereForm a in q.Controls.OfType <AnswereForm>()) { foreach (Control c in a.Controls) { string answereName; bool isGoodAnswere; if (c.ID == "AnswereText") { answereName = ((TextBox)c).Text; } else if (c.ID == "GoodAnswereCheckBox") { isGoodAnswere = ((CheckBox)c).Checked; } } } foreach (Control c in q.Controls.OfType <TextBox>()) { if (c.ID == "QuestionText") { name = ((TextBox)c).Text; } } //question = new Question(name, answeres.ToArray(), answereType); // questions.Add(question); } //Quizz quizz = new Quizz(QuizzName.Text, questions.ToArray()); // On créé un nouveau quizz // context.Quizzes.Add(quizz); context.SaveChanges(); // On sauvegarde les changements // /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ // /* ATTENTION : */ // /* */ // /* POUR QUE LES CHANGEMENTS SOIENT PRIS EN COMPTE : */ // /* Il faut que le fichier LO54_DB.mdf du dossier "App_Data" */ // /* ait dans la propriété : Copier dans le répertoire de sortie ----> Copier si plus récent */ // /* */ // /* */ // /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ refresh(); }
protected void Button_Creer_UV_Click(object sender, EventArgs e) { List <Panel> panes = new List <Panel>(); //On va parcourir chaque panel de question foreach (Control ctrl in panel_Questions_Container.Controls) { if (ctrl.ID != null) { if (ctrl.ID.Contains("Panel_Question_")) // on a à faire a un panel contenant questions + Réponses { Panel pane = (Panel)ctrl; if (!panes.Contains(pane)) { panes.Add(pane); } } } } // on a récupéré les panels des questions/réponses // on va les parcourir, pour créer en même temps question ET réponse int id = -1; bool hasOne = false; UVDb uvs = new UVDb(); int selectedUv = uvs.UVs.First(u => u.Denomination == this.RadioButtonList_ChoixUV.SelectedItem.Value).IdUv; Quizz q = new Quizz(QuizzName.Text.Trim(), selectedUv); List <Question> questions = new List <Question>(); foreach (Panel p in panes) { string questionID = p.ID.Substring(15); int.TryParse(questionID, out id); // On a récupéré l'id de la question //la textbox de la question TextBox tbQuestion = p.FindControl("TextBox_Question" + id) as TextBox; // On va créer des questions et des réponses Question question = new Question(q, tbQuestion.Text, AnswereType.QCM); // les textbox / checkbox des réponses : // C est ce panel qui contient les questions Panel pReps = p.FindControl("Reponses_Question_" + id) as Panel; List <TextBox> answers = new List <TextBox>(); List <CheckBox> isAnswer = new List <CheckBox>(); // On va le parcourir, et trouver les textbox réponses contenues qui ne sont pas "hidden" // Ainsi que les checkBox "bonne rép" foreach (Control ctrl in pReps.Controls) { if (ctrl.ID != null) { // On récupère par l'ID // tRep.ID = "TextBox_Question_Reponse_" + questionId + "_" + answerId; if (ctrl.ID.Contains("TextBox_Question_Reponse_" + id)) { // C est une des réponses TextBox tRep = (TextBox)ctrl; if (tRep.Visible) { if (!answers.Contains(tRep)) { answers.Add(tRep); } } } else if (ctrl.ID.Contains("chb_isGood_" + id)) { // C est une checkbox CheckBox cbRep = (CheckBox)ctrl; if (cbRep.Visible) { if (!isAnswer.Contains(cbRep)) { isAnswer.Add(cbRep); } } } } } // On a maintenant toutes les réponses pour la question en cours // il faut vérifier qu'on a au moins une "bonne réponse" pour la dite question en cours hasOne = false; foreach (CheckBox cb in isAnswer) { if (cb.Checked) { hasOne = true; break; } } // On a au moins une bonne rép if (hasOne) { foreach (TextBox rep in answers) { // on récupére l'id de la réponse // tRep.ID = "TextBox_Question_Reponse_" + questionId + "_" + answerId; int offset = 25 + id.ToString().Length + 1; int reponseId = -1; string answerId = rep.ID.Substring(offset); int.TryParse(answerId, out reponseId); // Ensuite on regarde si c est une bonne réponse ou non bool isGoodAnswer = isAnswer.First(cb => cb.ID.Equals("chb_isGood_" + id + "_" + answerId)).Checked; // Ce code est censé faire : // Parmi les checkbox je récupère le premier dont l'id vaut : cb.ID.Equals("chb_isGood_" + id + "_" + answerId // Et j'attribue sa valeur "Checked" à "isGoodAnswer" // On peut maintenant créer la réponse Answer answere = new Answer(rep.Text, isGoodAnswer); question.OtherAnsweres.Add(answere); } } else { Label_manqueRep.Visible = true; break; } questions.Add(question); } // end for each if (hasOne) { Label_manqueRep.Visible = false; q.Questions = questions; QuizzDb qdb = new QuizzDb(); qdb.Quizzes.Add(q); try { Console.WriteLine("-------------------- HEEEEEREEEEEEEEEE ------------------------"); qdb.Database.Log = Console.WriteLine; qdb.SaveChanges(); successDiv.Visible = true; clearUi(); } catch (System.Data.Entity.Infrastructure.DbUpdateException ex) { Response.Write(ex.ToString()); } } }