none
supprimer un ligne double d'un ListView RRS feed

  • Question

  • j'ai Controle ListView que je remplis au Click d'un bouton.Et ce que je veux est de controler les lignes du ListView les lignes qui contiennent les même éléments comme sur l'image ci-dessous.

    erreur image

    j'ai deja fais ce code enfin de verifier si il y a des lignes doubles mais cela ne marche pas

                            AddArticleCollection.Add(new ArticleModel {
                              ID = txtIDProduit.Text,
                              Design = txtDesigProduit.Text,
                              Qte = int.Parse(txt_qte_produit.Text),
                             PrixVente = double.Parse(txtPUProduit.Text)
                            });
    
                          
                                foreach (var item in AddArticleCollection)
                                {
                                    if (ListVarticle_pr_vend.Items.Contains(item))
                                    {                                   
                                        InfoBox info = new InfoBox("trouvé");
                                        info.ShowDialog();
                                    }
                                    else
                                    {
                                        ListVarticle_pr_vend.Items.Add(item);
                                    }
                                    
                                }

    je vous remercie d'avance!


    forum ms89

    dimanche 9 février 2014 16:09

Réponses

  • Bonjour,

    une nuit blanche mais j'ai fini quand même à trouvé la solution en m'appuyant sur vos exemples

    Merci à tous

    voici l'exemple:

      ArticleModel articleTrouvé;
                        articleTrouvé = AddArticleCollection.SingleOrDefault(article => article.ID == txtIDProduit.Text);
    
                        if (articleTrouvé == null)
                        {
                            AddArticleCollection.Add(new ArticleModel
                            {
                                ID = txtIDProduit.Text,
                                Design = txtDesigProduit.Text,
                                Qte = int.Parse(txt_qte_produit.Text),
                                PrixVente = double.Parse(txtPUProduit.Text)
                            });
    
    
                            ListVarticle_pr_vend.ItemsSource = AddArticleCollection;
                        }
                        else
                        {
                            articleTrouvé.Qte += int.Parse(txt_qte_produit.Text);
                            ListVarticle_pr_vend.Items.Refresh();
                        }
    


    forum ms89

    • Marqué comme réponse Claver amon samedi 15 février 2014 11:28
    samedi 15 février 2014 11:28

Toutes les réponses

  • Bonjour,

    C'est normal, la méthode Contains() compare les références d'objets.
    Vous pouvez utiliser la méthode Any() pour tester si vous article existe déjà dans la liste "AddArticleCollection". (Cela évitera d'ajouter des éléments dans votre ListView et vérifier si il existe...).

    // Si l'article n'existe déjà pas AddArticleCollection, l'ajouter dans la liste
    // Ici on se base sur l'ID, mais on peut rajouter d'autres conditions dans le Any() si nécessaire...
    if (AddArticleCollection.Any(article => article.Id == txtIDProduit.Text) == false)
    {
        AddArticleCollection.Add(new ArticleModel
        {
            ID = txtIDProduit.Text,
            Design = txtDesigProduit.Text,
            Qte = int.Parse(txt_qte_produit.Text),
            PrixVente = double.Parse(txtPUProduit.Text)
        });
    }

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    dimanche 9 février 2014 23:56
    Modérateur
  • bonjour merci de votre attention,

    je vois bien votre idée mais c'est pas ce que je veux.

    dans le cas où l'item existe je veux que la colonne quantité de l'item  en question augmente 


    forum ms89

    lundi 10 février 2014 00:53
  • Bonjour !

    La question est de savoir ce que déclenche l’événement click auquel vous faites référence.

    en principe ce devrait être:

    1-recherche l'existence d'un doublon

    2-si doublon existe incrémente un compteur sinon ajoute une ligne

    Cordialement

    lundi 10 février 2014 11:23
  • Bonjour,

    ArticleModel articleTrouvé;
    articleTrouvé = AddArticleCollection.SingleOrDefault(article => article.Id == txtIDProduit.Text);
    
    if (articleTrouvé == null)
    {
        AddArticleCollection.Add(new ArticleModel
        {
            ID = txtIDProduit.Text,
            Design = txtDesigProduit.Text,
            Qte = int.Parse(txt_qte_produit.Text),
            PrixVente = double.Parse(txtPUProduit.Text)
        });
    }
    else
    {
        articleTrouvé.Qte++;
    }

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    lundi 10 février 2014 22:04
    Modérateur
  • j'ai bien essayé mais malheureusement ça ne marche pas.

     private void txt_qte_produit_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.Key==Key.Enter)
                {
    
                     
                        
    
                        ArticleModel articleTrouvé;
                        articleTrouvé = AddArticleCollection.SingleOrDefault(article => article.ID == txtIDProduit.Text);
    
                        if (articleTrouvé == null)
                        {
                            AddArticleCollection.Add(new ArticleModel
                            {
                                ID = txtIDProduit.Text,
                                Design = txtDesigProduit.Text,
                                Qte = int.Parse(txt_qte_produit.Text),
                                PrixVente = double.Parse(txtPUProduit.Text)
                            });
                           
                          
                        }
                        else
                        {
                            articleTrouvé.Qte++;
                          
                        }
    
    
    
                        foreach (var item in AddArticleCollection)
                        {
                            ListVarticle_pr_vend.Items.Add(item);
                        }
    }
    }

    je crée en fait une application de  vente comme les app de supermarché.

    le principe est de rentré l'identifiant(ID) du produit dans un TextBox,ensuite on recupere les données concernant ce ID (designation,prix unitaire).et un autre textbox pr entrer la quantité souhaité par le client et un bouton pour ajouter le produit dans un ListView (ID ,design,prix ,qte,montant).Mais il qu'il est un répétition du meme article ce qui d'ailleurs normal et dans ce cas on ajoute pas le produit dans la collection mais plutot augmenter sa quantité.
    Voilà un peu l'idée


    si je ne suis pas assez clair n'hésitez pas

    merci d'avance de votre comprehension.


    forum ms89

    lundi 10 février 2014 23:08
  • Bonjour,

    Qu'est ce qui ne marche pas exactement ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    jeudi 13 février 2014 00:20
    Modérateur
  • Bonjour,

    Je comprends votre idée, c'est du genre "Gestion de stock" c'est à dire si un produit existe, on augmente la quantité, sinon on insert la nouvelle quantité.

    Dans ce cas la mise à jour des quantité en stock doit se faire dans la Base de Données. Je ne sais pas si en WPF, le control TextBox gère l'evenement Leave. Il vous faudra dans ce cas crée un evenement

    txtIDProduit.Text_Leave

    dans le quelle vous mettrez une procédure de recherche d'existence, de sorte que dès que l'ID du produit est entré et txtIdProduit quitté, l'existence est vérifiée. cette procédure peut aussi se faire sous un bouton;

    private bool MonArticleExiste(string aID)

    {

    if(contexte.Article.Any(A=>A.ID==aID))==true)

    {

    //La quantité augmente

    Article.Qte++;

    }

    else

    {

    //La Quantité reste inchangé

    Article.Qte=ArticleQte;

    }


    Ceci avant de faire tout affichage dans la ListView, et ça evitera les répétition dans cette ListView.


    • Proposé comme réponse Aurel Bera vendredi 14 février 2014 08:30
    jeudi 13 février 2014 10:34
  • Bonjour,

    l'evenement Leave n'existe pas en wpf,je vais quoi mtn?

    Cordialement.


    forum ms89

    vendredi 14 février 2014 09:34
  • Bonjour,

    une nuit blanche mais j'ai fini quand même à trouvé la solution en m'appuyant sur vos exemples

    Merci à tous

    voici l'exemple:

      ArticleModel articleTrouvé;
                        articleTrouvé = AddArticleCollection.SingleOrDefault(article => article.ID == txtIDProduit.Text);
    
                        if (articleTrouvé == null)
                        {
                            AddArticleCollection.Add(new ArticleModel
                            {
                                ID = txtIDProduit.Text,
                                Design = txtDesigProduit.Text,
                                Qte = int.Parse(txt_qte_produit.Text),
                                PrixVente = double.Parse(txtPUProduit.Text)
                            });
    
    
                            ListVarticle_pr_vend.ItemsSource = AddArticleCollection;
                        }
                        else
                        {
                            articleTrouvé.Qte += int.Parse(txt_qte_produit.Text);
                            ListVarticle_pr_vend.Items.Refresh();
                        }
    


    forum ms89

    • Marqué comme réponse Claver amon samedi 15 février 2014 11:28
    samedi 15 février 2014 11:28