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

C# Discussion :

empêcher la répétition des lignes dans un listview


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 13
    Par défaut empêcher la répétition des lignes dans un listview
    Bonjour,

    mon souci est comment empêcher la répétition de lignes dans un listview?
    mon listview contient les colonnes :
    ID Type Length Data count
    45 standard 4 FF 25 CD 8A
    25 standard 2 45 DC <=======|
    25 standard 3 45 DC F5 |
    25 standard 2 45 DC <======= comment empêcher la répétition de la
    ligne en gras


    voilà un capture écran:

    Nom : Capture.PNG
Affichages : 379
Taille : 9,0 Ko


    merci d'avance

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Quelle est ta source de données ? S'il s'agit de données provenant d'une base SQL, il faut revoir ta requête, mais sans le code, difficile de t'aider.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    cela me rappelle la demande de quelqu'un d'autre...

    Connais-tu les interfaces "IEquatable" et "IEqualityComparer" ainsi que la surcharge de la méthode "Equals(object,object)"? Si non, je t'invite à regarder ce sujet. Tu as peut-être le même problème.

    Après, avec les requêtes Linq, tu utilises éventuellement un "Distinct()" associé à un IEqualityComparer éventuellement.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 13
    Par défaut
    j'ai récupères les données à partir des textbox et j'utilises un boutton pour remplir ma listview

  5. #5
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 667
    Par défaut
    Et les données des TextBox proviennent d'ou ? Tu les rentres manuellement ? D'un fichier ? D'une base de données ?

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 13
    Par défaut
    je les rentres manuellement

  7. #7
    Membre chevronné Avatar de pascalCH
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 188
    Par défaut
    Citation Envoyé par brino1987 Voir le message
    mon listview contient les colonnes :
    ID Type Length Data count
    quel est la clef (la donnée ) permettant de déterminer qu'il s'agit d'un doublon ?

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 13
    Par défaut
    Citation Envoyé par pascalCH Voir le message
    quel est la clef (la donnée ) permettant de déterminer qu'il s'agit d'un doublon ?
    les données sont : ID, Type, Length et Data

  9. #9
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Tu peux créer une classe pour transporter tes données. Ensuite tu pourras utiliser l'opérateur Distinct() de LinQ, à condition que cette classe implémente IEquatable<T>. Voici un exemple :
    Code C# : 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
        class MyData : IEquatable<MyData>
        {
            public int ID { get; set; }
            public string Type { get; set; }
            public int Length { get; set; }
            public string Data { get; set; }
     
            #region IEquatable<MyData> Members
     
            public bool Equals(MyData other)
            {
                return (this.ID == other.ID && this.Type == other.Type && this.Length == other.Length && this.Data == other.Data);
            }
     
            #endregion
     
            public override int GetHashCode()
            {
                int hashID = this.ID == null ? 0 : this.ID.GetHashCode();
                int hashType = this.Type == null ? 0 : this.Type.GetHashCode();
                int hashLength = this.Length == null ? 0 : this.Length.GetHashCode();
                int hashData = this.Data == null ? 0 : this.Data.GetHashCode();
     
                return hashID ^ hashType ^ hashLength ^ hashData;
            }
        }
    Ensuite, on construit une liste de données (manuellement pour cet exemple...) :
    Code C# : 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
                var data = new List<MyData>();
                data.Add(new MyData
                {
                    ID = 45,
                    Type = "standard",
                    Length = 4,
                    Data = "FF 25 CD 8A"
                });
     
                // Doublon 1
                data.Add(new MyData
                {
                    ID = 25,
                    Type = "standard",
                    Length = 2,
                    Data = "45 DC"
                });
     
                data.Add(new MyData
                {
                    ID = 25,
                    Type = "standard",
                    Length = 3,
                    Data = "45 DC F5"
                });
     
                // Doublon 2
                data.Add(new MyData
                {
                    ID = 25,
                    Type = "standard",
                    Length = 2,
                    Data = "45 DC"
                });
    Pour finir, on bind en appelant la méthode Distinct :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    tonListView.DataSource = data.Distinct();
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  10. #10
    Membre Expert Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Pour finir, on bind en appelant la méthode Distinct :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    tonListView.DataSource = data.Distinct();
    brino1987 n'a pas précisé s'il est en winform ou asp.net. Je dis ça parce que en winforms, la listview n'a pas de propriété DataSource.

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 13
    Par défaut
    Citation Envoyé par callo Voir le message
    brino1987 n'a pas précisé s'il est en winform ou asp.net. Je dis ça parce que en winforms, la listview n'a pas de propriété DataSource.
    j'ai utilisé C# Winform

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 13
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Tu peux créer une classe pour transporter tes données. Ensuite tu pourras utiliser l'opérateur Distinct() de LinQ, à condition que cette classe implémente IEquatable<T>.[/CODE]
    DotNetMatt, mes données sont rentrées manuellement à partir de plusieurs textbox, c'est à dire lorsque je clique sur un boutton les données de textbox data; de textbox ID, de textbox Length et de textbox Type s'affiche dans un listview

    Ma listview est définit graphiquement sans class, c'et à dire j'ai défini les colonnes ID, Type, Length, Data ... graphiquement

    voilà ma listview:

    Nom : Capture.PNG
Affichages : 264
Taille : 54,0 Ko

    et voilà une la tranche de code boutton:

    Code C# : 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
    private void btnSend_Click(object sender, EventArgs e)
    {
        if (!radioManual.Checked && !radioPeriod.Checked)
            MessageBox.Show("Svp sélectionner une mode d'envoie!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     
        CanFrame frame = new CanFrame();
        if (radioManual.Checked)
        {
            byte[] buf;
     
            int len = Convert.ToInt16(nudLength.Value);
            uint id = Convert.ToUInt32(txtID.Text, 16);
     
            String CurrentTextBox = txtData0.Text + txtData1.Text + txtData2.Text + txtData3.Text + txtData4.Text + txtData5.Text + txtData6.Text + txtData7.Text;
     
            buf = new byte[CurrentTextBox.Length / 2];
     
            for (int i = 0; i < CurrentTextBox.Length / 2; i++)
                buf[i] = (byte)Convert.ToByte((CurrentTextBox).Substring(i * 2, 2), 16);
     
            String currentTextBox = txtData0.Text + " " + txtData1.Text + " " + txtData2.Text + " " + txtData3.Text + " " + txtData4.Text + " " + txtData5.Text + " " + txtData6.Text + " " + txtData7.Text;
     
            frame.ID = id;
            frame.Data = buf;
            DateTime time = DateTime.Now;
     
            Program.MyUsbCan.SendFrame(frame);
     
            // cette partie pour remplir ma listview:
     
            ListViewItem item1 = new ListViewItem(CanMsgType.Text);
     
            item1.SubItems.Add(txtID.Text);
            item1.SubItems.Add(nudLength.Value.ToString());
            item1.SubItems.Add(currentTextBox);
            item1.SubItems.Add(count.ToString());
            item1.SubItems.Add("null");
     
            listvTrans.Items.Add(item1);
        }
    }

    Cette partie pour empécher les doublon mais elle ça marche pas

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach (ListViewItem item1 in  listvTrans.Items)
    {
     
        int J=0;
        for (int i=J+1;i< listvTrans.Items.Count-1;i++) 
        {
            if ( listvTrans.Items[J].SubItems[1].ToString() ==  listvTrans.Items[i].SubItems[1].ToString())
                listvTrans.Items.RemoveAt(J);
        }
        J++;
    }
    Images attachées Images attachées  

Discussions similaires

  1. log4j: Répétitions des lignes dans le fichier log
    Par troumar dans le forum EDI et Outils pour Java
    Réponses: 0
    Dernier message: 06/05/2011, 11h02
  2. Colorer des lignes dans un ListView
    Par edertef dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 02/08/2010, 18h35
  3. Réponses: 6
    Dernier message: 12/01/2009, 10h31
  4. [C#] Affichage des lignes dans un tableau.
    Par maldufleur dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/04/2004, 11h28
  5. Couleur des lignes dans DBGrid
    Par eddie dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/06/2002, 18h15

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