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 :

Suppression d'un row depuis un gridview avec un checkbox et un boutton supprimer


Sujet :

ASP.NET

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2011
    Messages : 1
    Par défaut Suppression d'un row depuis un gridview avec un checkbox et un boutton supprimer
    Bonjour ,

    Je souhaite supprimer un row de ma gridview Grace a un control checkbox et un boutton supprimer , mais j'ai le message d'erreur suivant :
    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection. Nom du paramètre : index
    Voila 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
    <asp:GridView ID="GridView1" runat="server"
    AutoGenerateColumns="False"
    DataSourceID="SqlDataSource1"
    ShowFooter="true" >
    <Columns>
    <asp:TemplateField>
    <ItemTemplate>
    <asp:CheckBox ID="chkSelect" runat="server" />
    </ItemTemplate>
     
     
    </asp:TemplateField>
    <asp:BoundField DataField="Id"
    HeaderText="Id"
    SortExpression="Id" InsertVisible="False" ReadOnly="True" />
    <asp:BoundField DataField="Nom"
    HeaderText="Nom"
    SortExpression="Nom" />
    </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server"
     
    SelectCommand="SELECT [Id], [Nom] FROM [Produit]"
     
    DeleteCommand="DELETE FROM produit WHERE [id] = @id"
    ConnectionString="<%$ ConnectionStrings:super_marcheConnectionString %>">
    <DeleteParameters>
    <asp: Parameter Name="id" />
    </DeleteParameters>
    </asp:SqlDataSource>
    et voila le code que j'ai mis dans le boutton supprimer ( en vb ) :
    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
     
    ' Looping through all the rows in the GridView
     
    For Each row As GridViewRow In GridView1.Rows
     
    Dim checkbox As CheckBox = CType(row.FindControl("chkSelect"), CheckBox)
     
    'Check if the checkbox is checked.
     
    'value in the HtmlInputCheckBox's Value property is set as the //value of the delete command's parameter.
     
    If checkbox.Checked Then
     
    ' Retreive the Employee ID
     
    Dim id As Integer = Convert.ToInt32(GridView1.DataKeys(row.RowState).Value)
     
    ' Pass the value of the selected Employye ID to the Delete //command.
     
    SqlDataSource1.DeleteParameters("Id").DefaultValue = id.ToString()
     
    SqlDataSource1.Delete()
     
    End If
     
    Next row
    Merci d'avance

  2. #2
    Membre confirmé Avatar de hmimoud
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 135
    Par défaut
    Ok, I give you the code in 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
        protected void ButtonDelete_Click(object sender, EventArgs e)
        {
            List<Personne> personnes = null;
            personnes = new List<Personne>();
            bool atLeastOneRowDeleted = false;
            // Iterate through the GridView1.Rows property
            foreach (GridViewRow row in GridView1.Rows)
            {
                Personne p = new Personne();
                // Access the CheckBox
                CheckBox cb = (CheckBox)row.FindControl("ProductSelector");
                if (cb != null && cb.Checked)
                {
                    atLeastOneRowDeleted = true;
                    // First, get the ID for the selected row
                    int ID = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value);
     
                    // Add in the list
                    p = personneM.afficherParId(String.Format("{0}", ID));
                    personnes.Add(p);
                }
            }
            if (atLeastOneRowDeleted == true)
                personneM.supprimerList(personnes);
            this.LinqDataSource1.Where = "1=1";
        ;
            GridView1.DataBind();
        }
    A la place de linq tu met ton sqldatasource!

  3. #3
    Membre confirmé Avatar de hmimoud
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 135
    Par défaut
    Tu peux faire ça avec l’assistance c'est plus simple.
    Tu nomme ton linkbuton (commandname)apres l'avoir convertis en itemtemplate, tu lui passe l'id dans commandargument.
    Ensuite, ensuite dans la methode de commande du grid(proprietes->methodes)
    tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(e.commandname==nom_commande){
    //requete delete..
    where id=e.commandargument;
    }
    Ou bien tu peux mettre cet argument dans un champs caché, ensuite faire le delete where id=champscaché dans la methode click d'un bouton supprimer !

    NB: pour supprimer plusieurs lignes à la fois penses à mettre plusieurs arguments avec une concatenation, puis les separer avec un split() !

  4. #4
    Membre confirmé Avatar de hmimoud
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 135
    Par défaut
    Pour ton code en vb je crois que tu dois enlever le nextrow que tu as mis à la fin !

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2006
    Messages : 128
    Par défaut
    puisque t'as supprimé une ligne donc le compte de ligne change
    tu dois le réinitialiser par "par exemple" un goto

    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
     
    1:  For Each row As GridViewRow In GridView1.Rows
     
    Dim checkbox As CheckBox = CType(row.FindControl("chkSelect"), CheckBox)
     
    'Check if the checkbox is checked.
     
    'value in the HtmlInputCheckBox's Value property is set as the //value of the delete command's parameter.
     
    If checkbox.Checked Then
     
    ' Retreive the Employee ID
     
    Dim id As Integer = Convert.ToInt32(GridView1.DataKeys(row.RowState).Value)
     
    ' Pass the value of the selected Employye ID to the Delete //command.
     
    SqlDataSource1.DeleteParameters("Id").DefaultValue = id.ToString()
     
    SqlDataSource1.Delete()
     goto 1:
    End If
     
    Next row
    je crois que ça marchera

  6. #6
    Membre confirmé Avatar de hmimoud
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 135
    Par défaut
    OUI, il se peut que ça marche, c'est aussi une solution. Tu peux aussi reafficher ta grid ou y faire un select histoire de reinitialiser le compte !

Discussions similaires

  1. [Débutant] Suppression Row dans une DataGridView avec click droit
    Par didou038 dans le forum VB.NET
    Réponses: 2
    Dernier message: 24/01/2015, 17h37
  2. gridview avec colonne checkbox
    Par questlove dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/06/2008, 14h35
  3. probleme sur la suppression de rows d'une gridview
    Par kazoumoulox dans le forum ASP.NET
    Réponses: 2
    Dernier message: 19/06/2007, 10h38
  4. fichier batch (copie depuis lecteur réseau avec mot de passe
    Par Mickey34 dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 09/02/2006, 22h33
  5. Comment extraire un fichier depuis un CD avec secteurs illisibles ?
    Par Millenod dans le forum API, COM et SDKs
    Réponses: 13
    Dernier message: 22/01/2005, 12h09

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