none
remplir checkbox d'un gridview à partir de la base de données RRS feed

  • Question

  • Bonjour à tous,

    j'essaye depuis quelques jours de mettre en place un GridView contenant deux champs, un champ lié aux données permettant de remonter une liste d'interets (art, sport, voyage....) et un champ de checkbox permettant de faire un choix qui sera lié à un client.

    je pariviens à rajouter et à modifier dans la base de données, par exemple je peux par rapport à un client x rajouter dans la base de données ses centres d'interet et aprés les modifier, mais ce que je n'arrive pas à faire c'est afficher.

    voici le code asp de ma page :

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="page3.aspx.cs" Inherits="page3" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            Client :
            <asp:TextBox ID="txtclient" runat="server"></asp:TextBox>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <asp:Label ID="lblmessage" runat="server"></asp:Label>
            <br />
    &nbsp;&nbsp;
            <br />
            <asp:Button ID="Button1" runat="server" Text="Afficher" 
                onclick="Button1_Click" />
            <asp:Button ID="Button2" runat="server" Text="Ajouter" />
            <asp:Button ID="Button3" runat="server" Text="MAJ" onclick="Button3_Click" />
            <asp:Button ID="delete" runat="server" onclick="Button4_Click" 
                style="margin-bottom: 0px" Text="Supprimer" />
    &nbsp;<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                Height="91px" Width="237px" DataKeyNames="interest" >
                <Columns>
                    <asp:TemplateField HeaderText="Interet">
                        <ItemTemplate>
                            <asp:Label ID="interest" runat="server" Text='<%# Bind("interest") %>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("interest") %>'></asp:TextBox>
                        </EditItemTemplate>
                        <ItemStyle Width="200px" />
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:CheckBox ID="InterestSelector" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        
        </div>
        </form>
    </body>
    </html>

    et voici la partie c# :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Collections;
    public partial class page3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
                BindData();
        }
        private void BindData()
        {
            ConDB con1 = new ConDB();
            DataSet ds = con1.selection1("select * from interests");
            GridView1.DataSource = ds;
            GridView1.DataBind();
        }
        protected void Button4_Click(object sender, EventArgs e)
        {
            ConDB con1 = new ConDB();
            foreach (GridViewRow row in GridView1.Rows)
            {
                // Access the CheckBox         
                CheckBox cb = (CheckBox)row.FindControl("InterestSelector");
                if (cb != null && cb.Checked)
                {
                    Label lblinterest = (Label)row.FindControl("interest");
                    string interest = GridView1.DataKeys[row.RowIndex].Value.ToString();
                    string sql1 = "delete from interests where interest = '" + interest + "'";
                    con1.delete(sql1);
                }
            }
            BindData();
        }
        private void Addchoice(string client, string interest)
        {
            ConDB con1 = new ConDB();
            con1.insertion("INSERT INTO [choice] ([client], [interest]) VALUES ('" + client + "', '" + interest + "')");
        }
        private void Deletechoice(string client)
        {
            ConDB con1 = new ConDB();
            con1.delete("delete from choice where client='" + client + "'");
        }
        protected void Button3_Click(object sender, EventArgs e)
        {
            
            Deletechoice(txtclient.Text);
            foreach (GridViewRow row in GridView1.Rows)
            {
                CheckBox cb = (CheckBox)row.FindControl("InterestSelector");
                if (cb != null && cb.Checked)
                {
                   // Label lblinterest = (Label)row.FindControl("interest");
                    string interest = GridView1.DataKeys[row.RowIndex].Value.ToString();
                    Addchoice(txtclient.Text, interest);
                }
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            ConDB con1 = new ConDB();
            DataSet ds = con1.selection1("Select Interest from choice where client ='" + txtclient.Text + "'");
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
              //  ListItem currentCheckBox = form1.Items.FindByValue(dr["Interest"].ToString());
                foreach (GridViewRow row in GridView1.Rows)
                {
                    CheckBox currentCheckBox = (CheckBox)row.FindControl("InterestSelector");
                    if (currentCheckBox != null)
                    {
                        currentCheckBox.Checked = true;
                    }
                }
            }
        }
    }

    remarquez que j'ai essayé à travers le traitement de button1_click d'activer mes checkbox en fonction du résultat de la base, mais à l'exécution toutes les cases s'active.

    Merci d'avance pour votre aide.

    jeudi 26 juillet 2012 11:53

Réponses

  • Bonjour,

    dans votre le traitement de button1_click vous parcourez l'ensemble des lignes du dataset et pour chacune ces lignes l'ensemble des lignes de la gridview mais vous ne vérifiez aucune condition : l'ensemble des cases à cocher sont donc cohées. On peut imaginer qu'avant de cocher la case il vous faut vérifier si la valeur du champ interest de la ligne courante du dataset posséde la même valeur que le label interest de la ligne courante de votre gridview.

    Cordialement

    • Marqué comme réponse scania113 jeudi 26 juillet 2012 12:47
    jeudi 26 juillet 2012 12:15
    Modérateur

Toutes les réponses

  • Bonjour,

    dans votre le traitement de button1_click vous parcourez l'ensemble des lignes du dataset et pour chacune ces lignes l'ensemble des lignes de la gridview mais vous ne vérifiez aucune condition : l'ensemble des cases à cocher sont donc cohées. On peut imaginer qu'avant de cocher la case il vous faut vérifier si la valeur du champ interest de la ligne courante du dataset posséde la même valeur que le label interest de la ligne courante de votre gridview.

    Cordialement

    • Marqué comme réponse scania113 jeudi 26 juillet 2012 12:47
    jeudi 26 juillet 2012 12:15
    Modérateur
  • Merci beaucoup nikho,

    ça marche !

    jeudi 26 juillet 2012 12:48