// Se declenche quand on clique sur les boutons edit/delete/update/cancel
    protected void GridViewQuestion_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        Trace.Warn("GridViewQuestion_RowCommand");

        if (e.CommandName == "Edit")
        {
            // Trouver la Question selectionnee par l'utilisateur pour remplir les colonnes cachees lors du save
            int index = Convert.ToInt32(e.CommandArgument);

            GridView gv = ( GridView )e.CommandSource;
            string   q  = gv.DataKeys[index].Value.ToString();

            PollQuestionCollection questions = PollQuestionCollection.GetByQuestionnaire(SessionState.Questionnaire.QuestionnaireID);
            SessionState.Question = questions.FindByPollQuestionID(new Guid(q));
        }

        if (e.CommandName == "Delete")
        {
            int index = Convert.ToInt32(e.CommandArgument);

            GridView gv = ( GridView )e.CommandSource;

            Guid questionGuid = new Guid(gv.DataKeys[index].Value.ToString());
            int  status       = PollQuestion.Delete(questionGuid);
            SessionState.Limitations.SupprimerQuestion();
        }

        Trace.Warn(string.Format("GridViewQuestion_RowCommand CommandName : {0}", e.CommandName));
    }
    // Se declenche quand on clique sur les boutons edit/delete/update/cancel
    protected void GridViewQuestion_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Edit")
        {
            // Trouver la Question selectionnee par l'utilisateur
            int index = Convert.ToInt32(e.CommandArgument);

            GridView gv = ( GridView )e.CommandSource;
            string   q  = gv.DataKeys[index].Value.ToString();

            PollQuestionCollection questions = PollQuestionCollection.GetByQuestionnaire(SessionState.Questionnaire.QuestionnaireID);
            SessionState.Question = questions.FindByPollQuestionID(new Guid(q));
        }

        Trace.Warn(string.Format("GridViewQuestion_RowCommand CommandName : {0}", e.CommandName));
    }
    void AfficherToutLesVotesEnBas(Guid pollQuestionID)
    {
        PanelReponsesEnBas.Controls.Clear();

        bool afficherDateVote = SessionState.CheckBox["CheckBoxAfficherDateVote"];
        PollQuestionCollection pollQuestionCollection = PollQuestionCollection.GetByQuestionnaire(SessionState.Questionnaire.QuestionnaireID);

        // On cumul les Questions cliquees par l'utilisateur
        if (pollQuestionID != Guid.Empty)
        {
            // La Collection se reduit a une seule Question
            PollQuestion pollQuestion = pollQuestionCollection.FindByPollQuestionID(pollQuestionID);

            // Cumuler les questions cliquees par l'utilisateur
            // Sauf si elle est deja dans QuestionsVotesEnBas
            //   cela permet d'eviter de cumuler encore quand on passe aux formulaires print ou excel
            bool trouve = false;
            foreach (PollQuestion q in QuestionsVotesEnBas)
            {
                if (q.PollQuestionId == pollQuestionID)
                {
                    trouve = true;
                    break;
                }
            }
            if (trouve == false)
            {
                QuestionsVotesEnBas.Add(pollQuestion);
            }
        }
        else
        {
            // On prend toutes les questions du questionnaire
            QuestionsVotesEnBas = pollQuestionCollection;
        }

        // Si une sous-population est a l'etude on affiche que cette sous-population AME13072010
        PersonneCollection personnesAffichees = new PersonneCollection();

        PollVoteCollection[] tableauPollVotespersonnesAffichees;
        if (PersonnesOntReponduATout.Count > 0)
        {
            personnesAffichees = PersonnesOntReponduATout;
            // Il faut reafficher PanelReponse sinon il disparait
            // Attention ici on est appellé par ListBoxQui_SelectedIndexChange donc on doit faire un Clear
            PanelReponses.Controls.Clear();
            AfficherEnHautReponsesDeSousPopulation();
            tableauPollVotespersonnesAffichees = TableauVotesPersonnesOntReponduATout;
        }
        else
        {
            personnesAffichees = Personnes;
            tableauPollVotespersonnesAffichees = TableauVotesPersonnes;
        }

        foreach (PollQuestion question in QuestionsVotesEnBas)
        {
            PollAnswerCollection reponses = PollAnswerCollection.GetByPollQuestionID(question.PollQuestionId);

            Label labelQ = new Label();
            labelQ.CssClass = "LabelQuestionStyle";
            labelQ.Text     = question.Rank.ToString() + " - " + question.Question;

            Table     tableQ = new Table();
            TableCell cellQ  = new TableCell();
            TableRow  rowQ   = new TableRow();

            cellQ.Controls.Add(labelQ);
            rowQ.Controls.Add(cellQ);
            tableQ.Controls.Add(rowQ);
            PanelReponsesEnBas.Controls.Add(tableQ);

            foreach (PollAnswer reponse in reponses)
            {
                Table     tableR = new Table();
                TableCell cellR  = new TableCell();
                TableRow  rowR   = new TableRow();

                Label labelR = new Label();
                labelR.CssClass = "HyperLinkQuestionEnCoursStyle";
                if (FormulaireEnModeExcel)
                {
                    labelR.Text = "r : "; // ajouter un petit " r : " pour que ce con d'excel ne prenne pas ca pour une date
                }
                labelR.Text += reponse.Rank.ToString() + " - " + reponse.Answer;

                cellR.Controls.Add(labelR);
                rowR.Controls.Add(cellR);
                tableR.Controls.Add(rowR);
                PanelReponsesEnBas.Controls.Add(tableR);

                Table tableP = new Table();

                int indexPollVotes = 0;
                foreach (Personne p in personnesAffichees)
                {
                    PollVoteCollection pvc      = tableauPollVotespersonnesAffichees[indexPollVotes].FindByAnswerID(reponse.PollAnswerId);
                    string             personne = FormatPersonne(p);

                    foreach (PollVote pv in pvc)
                    {
                        // Table de Reponses des Interviewes
                        TableCell cellP = new TableCell();
                        TableRow  rowP  = new TableRow();

                        if (afficherDateVote)
                        {
                            TableCell cellD = new TableCell();
                            cellD.Text = pv.CreationDate.ToString();
                            rowP.Cells.Add(cellD);
                        }

                        cellP.Text     = personne; // OPT17072010 Strings.TexteToHTML( personne );
                        cellP.CssClass = "TableReponsePersonneStyle";
                        rowP.Cells.Add(cellP);
                        tableP.Rows.Add(rowP);
                        // Pour les reponses textuelles
                        if (pv.Vote != "")
                        {
                            TableCell cellV = new TableCell();
                            cellV.Text = Strings.TexteToHTML(pv.Vote);
                            rowP.Cells.Add(cellV);
                            tableP.Rows.Add(rowP);
                        }
                    }
                    if (pvc.Count > 0 /* votant */)
                    {
                        PanelReponsesEnBas.Controls.Add(tableP);
                    }
                    indexPollVotes += 1;
                }
            }
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack == false)
        {
            // Formulaire en mode Impression
            // AME14112009
            if (Request.QueryString["print"] != null || Request.QueryString["excel"] != null)
            {
                ImageButtonPrint.Visible = false;
                PanelControlSats.Visible = false;
                PanelAide.Visible        = false;
            }
            if (Request.QueryString["print"] != null)
            {
                QuestionnaireControlStatAll.ModePrint = true;
                TrBoutonRetour.Visible = true;
            }
            if (Request.QueryString["excel"] != null)
            {
                PanelBoutonControl.Visible = false;

                // En fait cela revient a changer l'extension html en .xls
                // c'est totalement bidon !
                Response.ContentType = "application/vnd.ms-excel"; // Set the content type to Excel
                Response.Charset     = "";                         // Remove the charset from the Content-Type header
                Page.EnableViewState = false;                      // Sinon Excel de merde ne sait pas lire le fichier genere !!!
                // Il faut absolument cette meta dans la MasterPage Print sinon cela ne marche pas pour
                // Excel d'ailleur en positionnant Charset ici on ne retrouve rien dans la source !...?
                // <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

                QuestionnaireControlStatAll.ModeExcel = true;
            }

            // Choisir le premier Questionnaire a la place de l'utilisateur
            if (SessionState.Questionnaire == null && SessionState.Questionnaires.Count > 0)
            {
                SessionState.Questionnaire = SessionState.Questionnaires[0];
            }

            if (Request.QueryString["QuestionnaireID"] != null)
            {
                int questionnaireID = int.Parse(Request.QueryString["QuestionnaireID"]);
                SessionState.Questionnaire = SessionState.Questionnaires.FindByID(questionnaireID);
            }

            // Charger les votes pour ce Questionnaire
            if (SessionState.Questionnaire != null && Votes == null)
            {
                Votes     = PollVoteCollection.GetPollVotesByQuestionnaireID(SessionState.Questionnaire.QuestionnaireID);
                Personnes = PersonneCollection.GetQuestionnaire(SessionState.Questionnaire.QuestionnaireID);
                initTableauVotesPersonnes(Personnes.Count, Personnes);
                LabelNombreContacts.Text = Personnes.Count.ToString();
            }

            if (Request.QueryString["PollAnswerID"] != null)
            {
                PanelSousPopulation.Visible = true;
                Guid pollAnswerID = new Guid(Request.QueryString["PollAnswerID"].ToString());

                // BUG25092009 Il ne faut ajouter 2 fois la meme reponse sinon il y a cumul
                // il faut eviter le cumul de PollAnswerID de Questions et de Reponses
                if (PollAnswerID.Contains(pollAnswerID) == false)
                {
                    PollAnswerID.Add(pollAnswerID);

                    // Trouver les votants
                    if (Votes.Count > 0)
                    {
                        // Comme on a que pollAnswerID a notre disposition, pour trouver la question il faut
                        // trouver la Reponses de pollAnswerID
                        // trouver la Question de la Reponse
                        PollAnswer             pollAnswer             = PollAnswerCollection.GetByPollAnswerID(pollAnswerID);
                        PollQuestionCollection pollQuestionCollection = PollQuestionCollection.GetByQuestionnaire(SessionState.Questionnaire.QuestionnaireID);
                        PollQuestion           pollQuestion           = pollQuestionCollection.FindByPollQuestionID(pollAnswer.PollQuestionId);

                        // Cumuler les Reponses cliquees par l'utilisateur et les Questions
                        Questions.Add(pollQuestion);
                        Reponses.Add(pollAnswer);

                        // BUB25092009 AfficherOnReponduATout();
                    }
                }

                // BUG25092009 il faut afficher tout ici
                if (Votes.Count > 0)
                {
                    AfficherOnReponduATout();
                }

                if (ListBoxQui.Items.Count <= 0)
                {
                    ListBoxQui.Items.Add("Pas de vote");
                    ListBoxQui.Rows = 1;

                    // On efface tout, sinon l'utilisateur est perdu
                    // et les Questions et les reponses continuent de s'accumuler
                    // et l'utilisateur ne voit rien
                    EffacerSousPopulation();
                }
                else
                {
                    ListBoxQui.Rows           = ListBoxQui.Items.Count <= 10 ? ListBoxQui.Items.Count : 10;
                    LabelListBoxQuiCount.Text = ListBoxQui.Items.Count.ToString();
                    PanelReponses.Visible     = true;
                }
            }
            else // du if ( Request.QueryString[ "PollAnswerID" ] != null )
            {
                ListBoxQui.Items.Add("Cliquez sur une réponse");
                ListBoxQui.Rows = 1;
                EffacerSousPopulation();
            }

            if (SessionState.Questionnaire != null)
            {
                QuestionnaireControlStatAll.SelectedQuestionnaireID = SessionState.Questionnaire.QuestionnaireID;
                PersonnesDropDownListQui.Clear();

                // Trouver les votants
                if (Votes.Count > 0)
                {
                    int idx = 0;
                    foreach (Personne p in Personnes)
                    {
                        //PollVoteCollection pvc = PollVoteCollection.GetPollVotes( SessionState.Questionnaire.QuestionnaireID, p.PersonneGUID );
                        //PollVoteCollection pvc = Votes.FindByPersonneGUID( p.PersonneGUID );
                        PollVoteCollection pvc = TableauVotesPersonnes[idx];

                        // A t il vote pour ce questionnaire ?
                        if (pvc.Count > 0)
                        {
                            // Cacher les infos sur les votants
                            if (SessionState.Questionnaire.Anonymat)
                            {
                                string personne = "personne" + idx.ToString();
                                DropDownListQui.Items.Add(personne);

                                Personne anonymat = new Personne();
                                anonymat                = p;
                                anonymat.Nom            = personne;
                                anonymat.Prenom         = "";
                                anonymat.EmailBureau    = "";
                                anonymat.Civilite       = "";
                                anonymat.TelephonePerso = "";

                                PersonnesDropDownListQui.Add(anonymat);

                                // BUG07062010 je vois pas pourquoi !!!
                                //ListBoxQui.Enabled = false;
                            }
                            else
                            {
                                string personne = FormatPersonne(p);
                                DropDownListQui.Items.Add(personne);

                                PersonnesDropDownListQui.Add(p);
                            }
                        }

                        idx += 1;
                    }
                }

                LabelVotes.Text = PersonnesDropDownListQui.Count.ToString();

                QuestionnaireControlStatAll.PersonneVotants = PersonnesDropDownListQui;
                // Afficher les votes du premier votant
                if (PersonnesDropDownListQui.Count >= 1)
                {
                    if (DropDownListQuiSelectedIndex != 0)
                    {
                        DropDownListQui.SelectedIndex = DropDownListQuiSelectedIndex;
                    }
                    Personne personne = PersonnesDropDownListQui[DropDownListQui.SelectedIndex];
                    QuestionnaireControlStatAll.SelectedQuestionnaireID = SessionState.Questionnaire.QuestionnaireID;
                    QuestionnaireControlStatAll.SelectedPersonneGUID    = personne.PersonneGUID;

                    AfficherVotantEnModePrint();
                }
            }

            CheckBoxAfficherReponseTextuelle.Checked = SessionState.CheckBox["CheckBoxAfficherReponseTextuelle"];
            CheckBoxAfficherDateVote.Checked         = SessionState.CheckBox["CheckBoxAfficherDateVote"];
            CheckBoxAfficherMoyennePonderee.Checked  = SessionState.CheckBox["CheckBoxAfficherMoyennePonderee"];
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack == false)
        {
            //// Choisir le premier Questionnaire a la place de l'utilisateur
            //if ( SessionState.Questionnaire == null && SessionState.Questionnaires.Count > 0 )
            //{
            //    SessionState.Questionnaire = SessionState.Questionnaires[ 0 ];
            //}

            //if ( Request.QueryString[ "QuestionnaireID" ] != null )
            //{
            //    int questionnaireID = int.Parse( Request.QueryString[ "QuestionnaireID" ] );
            //    SessionState.Questionnaire = SessionState.Questionnaires.FindByID( questionnaireID );
            //}

            if (Request.QueryString["CodeAcces"] != null)
            {
                int code = int.Parse(Request.QueryString["CodeAcces"]);
                // Dans SessionState.Questionnaires on prend une precaution pour verifier le membre
                // si SessionState.MemberInfo == null alors Va te faire loguer et donc on utilise
                // pas ce code ici !
                // SessionState.Questionnaire = SessionState.Questionnaires.FindByCodeAcces( code );
                QuestionnaireCollection questionnaires = QuestionnaireCollection.GetAll();
                SessionState.Questionnaire = questionnaires.FindByCodeAcces(code);
            }

            if (SessionState.Questionnaire == null || SessionState.Questionnaire.Publier == false)
            {
                PanelQuestionnairePasDePublication.Visible = true;
                PanelQuestionnairePublication.Visible      = false;
                return;
            }

            // Pour un meilleur referencement
            LabelTitre.Text = "Statistiques " + SessionState.Questionnaire.Description;
            Page.Title      = "Publication des Statistiques pour le questionnaire dont la description est " + SessionState.Questionnaire.Description;
            base.AddMetaContentType();
            base.AddMetaTag("description", "Publication des statistiques pour le questionnaire" + SessionState.Questionnaire.Description);
            base.AddMetaTag("keywords", "questionnaire, statistique, enquêtes, enquete, en ligne");
            base.AddMetaTag("revisit-after", "10 days");
            base.AddMetaTag("author", "Sodevlog");
            base.AddMetaTag("copyright", "Sodevlog");

            // Charger les votes pour ce Questionnaire
            if (SessionState.Questionnaire != null && Votes == null)
            {
                Votes     = PollVoteCollection.GetPollVotesByQuestionnaireID(SessionState.Questionnaire.QuestionnaireID);
                Personnes = PersonneCollection.GetQuestionnaire(SessionState.Questionnaire.QuestionnaireID);
            }

            if (Request.QueryString["PollAnswerID"] != null)
            {
                PanelSousPopulation.Visible = true;
                Guid pollAnswerID = new Guid(Request.QueryString["PollAnswerID"].ToString());

                // BUG25092009 Il ne faut ajouter 2 fois la meme reponse sinon il y a cumul
                // il faut eviter le cumul de PollAnswerID de Questions et de Reponses
                if (PollAnswerID.Contains(pollAnswerID) == false)
                {
                    PollAnswerID.Add(pollAnswerID);

                    // Trouver les votants
                    if (Votes.Count > 0)
                    {
                        // Comme on a que pollAnswerID a notre disposition, pour trouver la question il faut
                        // trouver la Reponses de pollAnswerID
                        // trouver la Question de la Reponse
                        PollAnswer             pollAnswer           = PollAnswerCollection.GetByPollAnswerID(pollAnswerID);
                        PollQuestionCollection pollAnswerCollection = PollQuestionCollection.GetByQuestionnaire(SessionState.Questionnaire.QuestionnaireID);
                        PollQuestion           pollQuestion         = pollAnswerCollection.FindByPollQuestionID(pollAnswer.PollQuestionId);

                        // Cumuler les Reponses cliquees par l'utilisateur et les Questions
                        Questions.Add(pollQuestion);
                        Reponses.Add(pollAnswer);

                        // BUB25092009 AfficherTout();
                    }
                }

                // BUG25092009 on peut afficher tout ici
                AfficherTout();

                if (ListBoxQui.Items.Count <= 0)
                {
                    ListBoxQui.Items.Add("Pas de vote");
                    ListBoxQui.Rows = 1;

                    // On efface tout, sinon l'utilisateur est perdu
                    // et les Questions et les reponses continuent de s'accumuler
                    // et l'utilisateur ne voit rien
                    EffacerSousPopulation();
                }
                else
                {
                    ListBoxQui.Rows           = ListBoxQui.Items.Count <= 10 ? ListBoxQui.Items.Count : 10;
                    LabelListBoxQuiCount.Text = "Sous-population : " + ListBoxQui.Items.Count.ToString();
                    PanelReponses.Visible     = true;
                }
            }
            else // du if ( Request.QueryString[ "PollAnswerID" ] != null )
            {
                ListBoxQui.Items.Add("Cliquez sur une réponse");
                ListBoxQui.Rows = 1;
                EffacerSousPopulation();
            }

            if (SessionState.Questionnaire != null)
            {
                QuestionnairePublication.SelectedQuestionnaireID = SessionState.Questionnaire.QuestionnaireID;

                LabelNombreContacts.Text = Personnes.Count.ToString();
                PersonnesDropDownListQui.Clear();
                // Trouver les votants
                if (Votes.Count > 0)
                {
                    foreach (Personne p in Personnes)
                    {
                        //PollVoteCollection pvc = PollVoteCollection.GetPollVotes( SessionState.Questionnaire.QuestionnaireID, p.PersonneGUID );
                        PollVoteCollection pvc = Votes.FindByPersonneGUID(p.PersonneGUID);

                        // A t il vote pour ce questionnaire ?
                        if (pvc.Count > 0)
                        {
                            string personne = p.Nom + "/" + p.Prenom + "/" + p.EmailBureau;
                            DropDownListQui.Items.Add(personne);
                            PersonnesDropDownListQui.Add(p);
                        }
                    }
                }

                QuestionnairePublication.PersonneVotants = PersonnesDropDownListQui;
                // Afficher les votes du permier votant
                if (PersonnesDropDownListQui.Count >= 1)
                {
                    if (DropDownListQuiSelectedIndex != 0)
                    {
                        DropDownListQui.SelectedIndex = DropDownListQuiSelectedIndex;
                    }
                    Personne personne = PersonnesDropDownListQui[DropDownListQui.SelectedIndex];
                    QuestionnairePublication.SelectedQuestionnaireID = SessionState.Questionnaire.QuestionnaireID;
                    QuestionnairePublication.SelectedPersonneGUID    = personne.PersonneGUID;
                }

                LabelVotes.Text = PersonnesDropDownListQui.Count.ToString();
            }

            CheckBoxAfficherReponseTextuelle.Checked = SessionState.CheckBox["CheckBoxAfficherReponseTextuelle"];
            CheckBoxAfficherDateVote.Checked         = SessionState.CheckBox["CheckBoxAfficherDateVote"];
        }

        // Effacer les objets que l'on publie pas
        //DropDownListQuestionnaires.Visible = false;
        ListBoxQui.Visible = false;
        //DropDownListQui.Visible = false;
        CheckBoxAfficherReponseTextuelle.Checked          = false;
        QuestionnairePublication.AfficherReponseTextuelle = false;
        QuestionnairePublication.AfficherLaDateDesVotes   = false;
    }