Ejemplo n.º 1
0
        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());
                }
            }
        }