none
Delete dans une datagrid RRS feed

  • Discussion générale

  • Bonjour , Me revoila encore avec un énième question ... Je suis sur ce problème depuis plus de 5 heures et je ne trouve pas la solution. 

    donc j'ai une gridVieuw rempli du panier de mon client. les enregistrement s'affiche bien mais voila j'ai rajouter un bouton et je veux que au click de ce bouton une ligne entière de mon grid  (un produit) soit supprimer que je soit dans ma variable session que dans mon tableau . 

    Pour recuperer la ligne et donc supprimer le produit je fais ceci ...

     protected void GridViewPanier_SelectedIndexChanged(object sender, EventArgs e)
        {
            // on selectionne la colone des id 
            int idProd = Convert.ToInt32(GridViewPanier.SelectedRow.Cells[1].Text);
    
            // on va chercher le produit selon l'id 
            using (bddEntities bdd = new bddEntities())
            {
                var table = (from p in bdd.Produit select p).ToList<Produit>();
                foreach (Produit result in table)
                {
                    if (result.idProduit == idProd)
                    {
                       this.panier.supprimerProduit(result);
                        
                    }
                }
            }
    
          
            Session["panier"] = panier;
    
    
            
        }
    ET la méthode que j'utilise supprimer Produit est défini dans ma classe mon panier. 
     public void supprimerProduit(Produit produit)
        {
            listeProd.Remove(produit);
            totalHTVA -= Convert.ToDouble(produit.prixhtva);
            totalTVAC -= (Convert.ToDouble(produit.prixhtva)) * (1 + (Convert.ToDouble(produit.tva)));
        }

    Aprés tout ça j'obtient ceci ...

    Donc mon panier est bien dans une grid mais au click sur delete le prix change mais le produit est toujours existant dans mon grid ... et je ne comprend vraiment pas pourquoi  ...

    samedi 23 juin 2012 11:30

Toutes les réponses

  • Bonjour,

    Comment est "bindé" votre GridView ? Pouvez-vous nous montrer le code qui permet de charger le contenu de votre GridView ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    dimanche 24 juin 2012 18:39
    Modérateur
  • bien sur ... 

    C'est grace à cette fonction qui est appelée dans le load de la page :)

        protected void init()
        {
            BulletedList1.Items.Clear();
            
            if (Session["panier"] == null)
            {
                Label1.Text = "Vous n'avez pas de panier";
                Label2.Text = "";
                Label3.Text = "";
            }
            else
            {
    
                Label8.Visible = false;
                int i;
                Label1.Text="Voici les élèments de votre panier";
                MonPanier panier = ((MonPanier)Session["panier"]);
                for (i = 0; i < panier.getListeProd().Count; i++)
                {
                    BulletedList1.Items.Add(panier.getListeProd()[i].nom);
                    liste = panier.getListeProd()[i].nom;
    
                    //GridView1.Rows[i] = liste;
                    //GridViewPanier.DataSource = panier.getListeProd()[i].nom; ;
                    //GridViewPanier.DataBind();
                            
                }
                Session["tab"] = liste;
    
                nbPanier = i;
                // affiche les totaux 
                Label2.Text = Convert.ToString(panier.getTotalHTVA());
                Label3.Text = Convert.ToString(panier.getTotalTVAC());
    
                Session["NbPanier"] = panier.getListeProd().Count;
    
               this.GridViewPanier.DataSource = panier.getListeProd();
               this.GridViewPanier.DataBind();
    
              
             
            }
    
        }

    dimanche 24 juin 2012 19:22
  • Bonjour,

    L'événement SelectedIndexChanged est déclenché après le Load de la page. Dans le Load de la page vous faite un DataBind() du DataGridView.
    Donc vous binder des éléments dans votre DataGridView qui sont au niveau de l'événement Load() (donc le panier non modifié).

    La modification du panier dans l'événement SelectedIndexChanged qui est déclenché juste après n'apporte rien du tout au niveau de votre GridView.

    Est-ce clair pour vous ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    dimanche 24 juin 2012 21:54
    Modérateur
  • Non pas vraiment je dois avouer ..

    Je comprend que  je charge mon panier avec certaine donnée grâce a un databind .. ok 

    Je comprend aussi que comme je fais le init avant le selectedindexChanges donc les modification sont inutile...

    Mais ce que je ne comprend pas c'est que si le faire après est inutile il faut le faire avant. 

    Seule problème comment sélectionnée une ligne si elle est existante car pas chargé par le databind . 

    Le seule solution que je vois serais de la chargé une deuxième fois le databind avec les nouvelles données ..

    suis-je sur la bonne voie ? 

    Mercii :) 

    dimanche 24 juin 2012 22:32
  • Bonjour,

    vous devez en effet après la suppression, réeffectuer le binding et donc effectivement d'après votre code refaire

    this.GridViewPanier.DataSource = panier.getListeProd();
    this.GridViewPanier.DataBind();
    dans l'event selectedindexChanges.

    Cordialement

    mardi 26 juin 2012 12:47
    Modérateur
  • Oui j'ai fait ce test mais ça ne fonctionne pas ...

    Le gridVieuw contient toujours les éléments censés être supprimés

    Merci quand même 

    Bien à vous 

    mardi 26 juin 2012 22:52
  • Et quand vous regardez la liste retournée par getListeProd, celle ci ne contient plus les éléments supprimés ?

    Cordialement.

    mercredi 27 juin 2012 08:04
    Modérateur