IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Supprimer les lignes d'un GridView


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Par défaut Supprimer les lignes d'un GridView
    Bonjour tout le monde...

    Je sais qu'il existe beaucoup de discussion à propos de la suppression de lignes des GridView, mais rien de ce que j'ai pu lire et tester a réglé mon problème...

    Voila la synthaxe de mon GridView dans le code ASP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <asp:GridView ID="gvSalarie" runat="server" AllowPaging="True" AllowSorting="True"
                DataKeyNames="matricule,typeDocument"
                AutoGenerateColumns="False" 
                SkinID="tableMaitre"
                OnSelectedIndexChanged="gvSalarie_SelectedIndexChanged"
                OnDataBound="gvSalarie_DataBound" 
                OnRowDataBound="gvSalarie_RowDataBound"
                OnSorting="gvSalarie_Sorting" Width="95%">
                <Columns>
                    <asp:BoundField DataField="societe" HeaderText="Société" SortExpression="societe">
                        <HeaderStyle CssClass="monGridView"/>
                        <ItemStyle Width="12.04%" CssClass="monGridView"/>
                    </asp:BoundField>
                    <asp:BoundField DataField="unite" HeaderText="Unité" SortExpression="unite">
                        <HeaderStyle CssClass="monGridView"/>
                        <ItemStyle Width="14.46%" CssClass="monGridView"/>
                    </asp:BoundField>
                    <asp:BoundField DataField="groupeAgence" HeaderText="Groupe Agence" SortExpression="groupeAgence">
                        <HeaderStyle CssClass="monGridView"/>
                        <ItemStyle Width="14.46%" CssClass="monGridView"/>
                    </asp:BoundField>
                    <asp:BoundField DataField="agence" HeaderText="Agence" SortExpression="agence">
                        <HeaderStyle CssClass="monGridView"/>
                        <ItemStyle Width="14.46%" CssClass="monGridView"/>
                    </asp:BoundField>
                    <asp:BoundField DataField="categorie" HeaderText="Catégorie" SortExpression="categorie">
                        <HeaderStyle CssClass="monGridView"/>
                        <ItemStyle Width="5.42%" CssClass="monGridView"/>
                    </asp:BoundField>
                    <asp:BoundField DataField="matricule" HeaderText="Matricule" SortExpression="matricule">
                        <HeaderStyle CssClass="monGridView"/>
                        <ItemStyle Width="5.42%" CssClass="monGridView"/>
                    </asp:BoundField>
                    <asp:BoundField DataField="nom_prenom" HeaderText="Nom Prénom" SortExpression="nom_prenom">
                        <HeaderStyle CssClass="monGridView"/>
                        <ItemStyle Width="14.46%" CssClass="monGridView"/>
                    </asp:BoundField>
                    <asp:BoundField DataField="TypeDocument" HeaderText="Type Document" SortExpression="TypeDocument">
                        <HeaderStyle CssClass="monGridView"/>
                        <ItemStyle Width="12.04%" CssClass="monGridView"/>
                    </asp:BoundField>
                    <asp:TemplateField>
                        <HeaderStyle HorizontalAlign="Center" />
                        <ItemTemplate>
                            <asp:ImageButton ID="afficheDocument" runat="server" OnClick="afficheDocument_Click" />
                        </ItemTemplate>
                        <ItemStyle Width="2.41%" />
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <HeaderStyle HorizontalAlign="Center" />
                        <HeaderTemplate>
                            <asp:CheckBox ID="lesSelections" runat="server"/>
                        </HeaderTemplate>
                        <ItemStyle Width="2.41%" HorizontalAlign="Center" />
                        <ItemTemplate>
                            <asp:CheckBox ID="uneSelection" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
    Celui-ci est alimenté par une requête SQL qui se trouve dans mon code C#, car il affiche différentes données selon la recherche que j'effectue précédemment, pour ça que je ne suis pas passée par le mode designer pour ceux qui se poseraient la question...


    Voici maintenant mon code de suppression dans la partie C# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
        protected void btSupprimer_Click(object sender, EventArgs e)
        {
            recherche();
            string requete;
            SqlConnection connexion = new SqlConnection("Data Source=STQY-589\\SQLEXPRESS; Initial Catalog=DossIndiv;Integrated Security=True");
            List<string[]> list = new List<string[]>();
            int nbLigne = gvSalarie.Rows.Count;
            for (int i = 0; i < nbLigne; i++)
            {
                if (((CheckBox)gvSalarie.Rows[i].FindControl("uneSelection")).Checked)
                {
                    list.Add(new string[2]{gvSalarie.DataKeys[i]["matricule"].ToString(),
                                           gvSalarie.DataKeys[i]["typeDocument"].ToString()});
                    try
                    {
                        if (connexion.State == ConnectionState.Closed)
                        {
                            connexion.Open();
                        }
                        requete = "DELETE FROM [TABLEAU] " +
                                  "WHERE [matricule] = " + gvSalarie.DataKeys[i]["matricule"].ToString() + " " +
                                  "AND [typeDocument] = " + gvSalarie.DataKeys[i]["typeDocument"].ToString();
                        // Exécution de la requête et affichage du GridView
                        SqlCommand commande = new SqlCommand(requete, connexion);
                        SqlDataAdapter sqlDA = new SqlDataAdapter(commande);
                        DataSet ds = new DataSet();
                        sqlDA.Fill(ds);
                        gvSalarie.DataSource = ds;
                        gvSalarie.DataBind();
                        EnableViewState = true;
                        commande.Dispose();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex);
                    }
                    gvSalarie.DeleteRow(i);
                }
            }
            if (list.Count > 0)
            {
                Session["ListeDocSalarie"] = list;
            }
            recherche();
        }
    En fait, y'a une chose que je ne comprends pas, c'est que lorsque je débogue et que je fais du pas à pas, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (((CheckBox)gvSalarie.Rows[i].FindControl("uneSelection")).Checked)
    ne fonctionne pas : je ne rentre pas dans la condition même si ma ligne est bien "checkée".
    Moi je ne vois pas où est la problème dans ce code et je suis ouverte à toutes critiques... lol


    >>> Redouane, au secours!!! lol

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    tu sais que tu ne fermes jamais ta connexion?

    mets plutot ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    using (SqlConnection connexion = new SqlConnection("Data Source=STQY-589\\SQLEXPRESS; Initial Catalog=DossIndiv;Integrated Security=True"))
    {
    List<string[]> list = new List<string[]>();
            int nbLigne = gvSalarie.Rows.Count;
            for (int i = 0; i < nbLigne; i++)
            {
                if (((CheckBox)gvSalarie.Rows[i].FindControl("uneSelection")).Checked)
                {
                    list.Add(new string[2]{gvSalarie.DataKeys[i]["matricule"].ToString(),
                                           gvSalarie.DataKeys[i]["typeDocument"].ToString()});
                    try
                    {
                        if (connexion.State == ConnectionState.Closed)
                        {
                            connexion.Open();
                        }
                        requete = "DELETE FROM [TABLEAU] " +
                                  "WHERE [matricule] = " + gvSalarie.DataKeys[i]["matricule"].ToString() + " " +
                                  "AND [typeDocument] = " + gvSalarie.DataKeys[i]["typeDocument"].ToString();
                        // Exécution de la requête et affichage du GridView
                        SqlCommand commande = new SqlCommand(requete, connexion);
                        SqlDataAdapter sqlDA = new SqlDataAdapter(commande);
                        DataSet ds = new DataSet();
                        sqlDA.Fill(ds);
                        gvSalarie.DataSource = ds;
                        gvSalarie.DataBind();
                        EnableViewState = true;
                        commande.Dispose();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex);
                    }
                    gvSalarie.DeleteRow(i);
                }
            }
    }

    ensuite, elle fait quoi ta méthode recherche()?

    car si tu coches une case, que t'appuies sur un bouton, puis recharge les données, alors c'est logique qu'aucune ligne ne soit cochée

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Par défaut
    car si tu coches une case, que t'appuies sur un bouton, puis recharge les données, alors c'est logique qu'aucune ligne ne soit cochée
    Effectivement, dit comme ça, je suis d'accord avec toi...


    En fait je vais expliquer rapidement ce que fais ma page :
    Au chargement de celle-ci, j'ai des dropdownlist, un bouton recherche et mon gridview remplis par la TOTALITÉ des données se trouvant dans ma base de données via une fonction afficheGridView().

    Selon ce que je sélectionne ou pas dans mes dropdownlist (je ne suis pas forcée de faire une sélection sur toute mes dropdownlist pour effectuer une recherche) via la fonction recherche(), mon gridview affiche les données recherchées et le bouton supprimer apparait ou pas (sa dépend aussi de quelles valeurs j'ai sélectionnée dans les dropdownlist).

    Dans le cas où mon bouton supprimer apparait, dans la fonction que j'ai envoyé précédement, lorsque je n'avais pas mis la fonction recherche() au début, le count nbligne prenait comme valeur la totalité de mes lignes, comme si je venais de la fonction afficheGridView() alors que je viens de la fonction recherche() et que de l'une à l'autre, je n'ai pas le même nombre de lignes, forcement vu que je fais un tri pour l'une d'entre elles... (je ne sais pas si je suis bien clair )

    Bref, je sais pas trop comment m'y prendre pour écrire cette fonction supprimer()...

  4. #4
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Par défaut
    Bon ça y est, j'ai réglé mon problème de fonction et c'est bon, je rentre bien dans ma condition.

    Le problème était que je chargeais ma fonction afficheGridView() directement dans le Load. Je l'ai mis dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!IsPostBack)
            {
                afficheGridView();
            }
    du load et ça a réglé le problème de ma checkbox considérée comme non checkée...

    Sauf que maintenant, (lol quand on résout un problème y'en a toujours un autre)
    bah en fait mon dataset reste à null et m'envoie en exception...
    Quelqu'un a une idée??

    Rappelle du code C#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
        protected void btSupprimer_Click(object sender, EventArgs e)
        {
            string message = "Problème lors de la connexion";
            string requete;
            SqlConnection connexion = new SqlConnection("Data Source=STQY-589\\SQLEXPRESS; Initial Catalog=DossIndiv;Integrated Security=True");
            List<string[]> list = new List<string[]>();
            int nbLigne = gvSalarie.Rows.Count;
            for (int i = 0; i < nbLigne; i++)
            {
                list.Add(new string[2]{gvSalarie.DataKeys[i]["matricule"].ToString(),
                                       gvSalarie.DataKeys[i]["typeDocument"].ToString()});
                if (((CheckBox)gvSalarie.Rows[i].FindControl("uneSelection")).Checked)
                {
                    try
                    {
                        if (connexion.State == ConnectionState.Closed)
                        {
                            connexion.Open();
                        }
                        requete = "DELETE FROM [TABLEAU] " +
                                  "WHERE [matricule] = " + gvSalarie.DataKeys[i]["matricule"].ToString() + " " +
                                  "AND [typeDocument] = " + gvSalarie.DataKeys[i]["typeDocument"].ToString();
                        // Exécution de la requête et affichage du GridView
                        SqlCommand commande = new SqlCommand(requete, connexion);
                        SqlDataAdapter sqlDA = new SqlDataAdapter(commande);
                        DataSet ds = new DataSet();
                        sqlDA.Fill(ds);
                        gvSalarie.DataSource = ds;
                        gvSalarie.DataBind();
                        EnableViewState = true;
                        commande.Dispose();
                        connexion.Close();
                    }
                    catch (Exception ex)
                    {
                        //Outil.Message(message, this);
                        Console.WriteLine(ex);
                    }
                    //gvSalarie.DeleteRow(i);
                }
            }
            if (list.Count > 0)
            {
                Session["ListeDocSalarie"] = list;
            }
            recherche();
        }

  5. #5
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    le using est plus propre que le connexion.Close()


    ensuite, en pas à pas, ca te donne quoi? Si tu execute ta requete directement sur le serveur (sans passer par du code) elle te retourne bien des résultats?

  6. #6
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bonjour

    Désolé, j'ai pas pu entrer dans la discussion depuis le début.
    bon, pour le problème du DataSet, pourquoi déjà tu l'utilise dans une requette de suppression, juste utilise ExecuteNonQuery de l'objet SqlCommand, il te retourne le nombre de lignes traitées.
    j'ai vu ton code, et ton premier problème, je pense que tu peux faire un code inspiré du tien, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    protected void btSupprimer_Click(object sender, EventArgs e)
        {
            List<string[]> list = new List<string[]>();
            int nbLigne = gvSalarie.Rows.Count;
     
            for (int i = 0; i < nbLigne; i++)
            {
                if (((CheckBox)gvSalarie.Rows[i].FindControl("uneSelection")).Checked)
                {
                    list.Add(new string[2]{gvSalarie.DataKeys[i]["matricule"].ToString(),
                                           gvSalarie.DataKeys[i]["typeDocument"].ToString()});
     
                    DeleteGridItem(gvSalarie.DataKeys[i]["matricule"].ToString(),
                        gvSalarie.DataKeys[i]["typeDocument"].ToString());
     
                }
            }
     
            // Appel de la méthode qui fait le mappage du GridView avec la source de données
            gvSalarie.DataSource = TaSourceDeDonnee; // Code que t'a fais en C# pour récupération des données selon les critères de recherche.
            gvSalarie.DataBind();
        }
     
        private bool DeleteGridItem(string matricule, string typeDocument)
        {
            string StrConn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            string requete;
            int NbreLignesSupprimees = 0;
     
     
            using (SqlConnection connexion = new SqlConnection(StrConn))
            {
                try
                {
                    if (connexion.State == ConnectionState.Closed)
                    {
                        connexion.Open();
                    }
                    requete = "DELETE FROM [TABLEAU] " +
                                  "WHERE [matricule] = " + matricule + " " +
                                  "AND [typeDocument] = " + typeDocument;
     
                    SqlCommand commande = new SqlCommand(requete, connexion);
                    NbreLignesSupprimees += commande.ExecuteNonQuery();
                    commande.Dispose();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                    return false;
                }
            }
     
            if (NbreLignesSupprimees > 0)
                return true;
            else
                return false;
     
        }
    et dans le fichier de configuration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <add name="ConnectionString" connectionString="Data Source=STQY-589\\SQLEXPRESS; Initial Catalog=DossIndiv;Integrated Security=True"
               providerName="System.Data.SqlClient" />

    tu vois que tu peux utiliser ici, juste commande.ExecuteNonQuery() pour la suppression, et tu peux aprés la suppression lié le GridView avec ta source de données du départ (celle que t'a fais pour récupération des données selon les critères de recherche).

    J'espère que ça va marcher pour toi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 25/06/2008, 13h54
  2. Supprimer les lignes vides d'un document Word
    Par Jerfa dans le forum VBA Word
    Réponses: 4
    Dernier message: 28/08/2006, 16h12
  3. Réponses: 1
    Dernier message: 17/05/2006, 09h19
  4. Réponses: 2
    Dernier message: 04/05/2006, 13h10
  5. supprimer les lignes vides?
    Par VinnieMc dans le forum Langage
    Réponses: 5
    Dernier message: 27/02/2006, 14h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo