Partage
  • Partager sur Facebook
  • Partager sur Twitter

GridView et Checkbox

    14 janvier 2018 à 9:50:39

    J'ai un problème au sujet de deux GridView et de l'utilisation de Checkbox.

    En effet, j'ai un premier GridView alimenté par des données que j'ai récupéré dans une donnée typé XML, et dont la première colonne de ce GridView est composé de CheckBox afin de sélectionner la ou les valeurs du tableau pour les transmettre et les afficher dans un autre tableau sur la même page (pour le moment c'est le résultat que je souhaite, surtout pour faire des tests, car la finalité sera de faire la même chose, mais les données seront envoyées dans un tableau sur une autre page/onglet).

    Le 1er tableau s'alimente comme ça (pour le moment pas de problème :)) :

    Voici mon code html : 

    <form id="form1" runat="server">
            <div>
                <asp:Button ID="btn_valider" runat="server" Text="Valider" OnClick="btn_valider_Click" />            
            </div>
            <br />
            <div>
                <asp:GridView CssClass="table" ID="gv" runat="server" AutoGenerateColumns="False" BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None">
                    <AlternatingRowStyle BackColor="PaleGoldenrod" />
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="select_template"/>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="Nom_Template" HeaderText="Nom Template"/>
                        <asp:BoundField DataField="Time_Last_Modified" HeaderText="Date de modification" />
                        <%--<asp:BoundField DataField="FormId" HeaderText="FormId" />
                        <asp:BoundField DataField="NameForm" HeaderText="Nom Formulaire" />
                        <asp:BoundField DataField="Time_Last_Modified_Form" HeaderText="Date modification Form" />--%>
                    </Columns>
                    <FooterStyle BackColor="Tan" />
                    <HeaderStyle BackColor="Tan" Font-Bold="True" />
                    <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" />
                    <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
                    <SortedAscendingCellStyle BackColor="#FAFAE7" />
                    <SortedAscendingHeaderStyle BackColor="#DAC09E" />
                    <SortedDescendingCellStyle BackColor="#E1DB9C" />
                    <SortedDescendingHeaderStyle BackColor="#C2A47B" />
                </asp:GridView>
    
                <asp:GridView CssClass="table" ID="GridViewResult" runat="server" AutoGenerateColumns="False" BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None">
                    <AlternatingRowStyle BackColor="PaleGoldenrod" />
                    <Columns>
                        <asp:BoundField DataField="Nom_Template" HeaderText="Nom Template"/>
                        <asp:BoundField DataField="Time_Last_Modified" HeaderText="Date de modification" />
                        <%--<asp:BoundField DataField="FormId" HeaderText="FormId" />
                        <asp:BoundField DataField="NameForm" HeaderText="Nom Formulaire" />
                        <asp:BoundField DataField="Time_Last_Modified_Form" HeaderText="Date modification Form" />--%>
                    </Columns>
                    <FooterStyle BackColor="Tan" />
                    <HeaderStyle BackColor="Tan" Font-Bold="True" />
                    <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" />
                    <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
                    <SortedAscendingCellStyle BackColor="#FAFAE7" />
                    <SortedAscendingHeaderStyle BackColor="#DAC09E" />
                    <SortedDescendingCellStyle BackColor="#E1DB9C" />
                    <SortedDescendingHeaderStyle BackColor="#C2A47B" />
                </asp:GridView>
        </form>

    Je veux que le 2ème tableau apparaisse suite à un click bouton, voici le code du bouton click : 

    protected void btn_valider_Click(object sender, EventArgs e)
            {
                //Response.Redirect("WebForm2.aspx");
    
                DataTable dtResult = new DataTable();
                dtResult.Columns.AddRange(new DataColumn[2] { new DataColumn("Nom_Template"), new DataColumn("Time_Last_Modified") });
                foreach (GridViewRow row in gv.Rows)
                {
                    if(row.RowType == DataControlRowType.DataRow)
                    {
                        CheckBox chkRow = (row.Cells[0].FindControl("select_template") as CheckBox);
                        if(chkRow.Checked)
                        {
                            string name = row.Cells[1].Text;
                            string time = row.Cells[2].Text;
                            dtResult.Rows.Add(name, time);
                            System.Diagnostics.Debug.WriteLine("name : " + name + " // Time : " + time);
                        }
                    }
                }
                GridViewResult.DataSource = dtResult;
                GridViewResult.DataBind();
            }

    Quand je sélectionne un ou plusieurs checkbox et que je clique sur "Valider", les checkbox se decochent et le 2ème tableau n'apparait pas du tout.

    Auriez-vous une idée ?

    (Pour info, dans mon HTML, il y a des éléments que j'ai mis en commentaire pour ne pas les utiliser sur mes tests actuels, mais je les garde, car je devrais les utiliser. Donc excusez la lourdeur du code du fait des ces commentaires parfois perturbant à la lecture :'().

    EDIT 10h24 : 

    Bon... je suis confus, car j'ai réussi à débloquer tout seul la situation en rajoutant la mention suivante dans l'initialisation de mon 1er tableau : 

    if(sdr.HasRows && !this.IsPostBack)

    C'est la mention !this.IsPostBack qui a débloqué la situation.

    Alors, il est vrai que celà fonctionne si on décide de tout afficher sur une même page. Mais au sujet d'un affichage sur dans une autre page (ouverture d'un nouvel onglet) ?

    -
    Edité par ClémentPraudel1 14 janvier 2018 à 10:24:48

    • Partager sur Facebook
    • Partager sur Twitter

    GridView et Checkbox

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown