Avatar billede olesen85 Nybegynder
23. februar 2011 - 08:58 Der er 2 kommentarer og
1 løsning

List sotering (windows forms)

Hej jeg har en liste hvor der kan forekomme dubletter, nu er mit spørgs mål så hvordan kan jeg få vist listen i en combobox uden at dubletterne bliver vist.

Min list inderholder:

Kundenavn      kontonr              saldo

det jeg skal havde vist i comboboxen er kundenavnet.
Avatar billede aaberg Nybegynder
23. februar 2011 - 11:09 #1
Dette er heldigvis enkelt i .NET.

Først må du sørge for at 2 instanser af din Kunde klasse kan sammenlignes korrekt med Equals metoden. Dette gøres nemt ved at implementere IEquatable<Kunde> interfacet. Du skal også override GetHashCode() metoden. Se eksemplet herunder:


public class Kunde : IEquatable<Kunde>
{
    public string Kundenavn { get; set; }
    public string Kontonr { get; set; }
    public int Saldo { get; set; }

    public bool Equals(Kunde other)
    {
        return
            this.Kundenavn.Equals(other.Kundenavn) &&
            this.Kontonr.Equals(other.Kontonr);
    }

    public override int GetHashCode()
    {
        return this.Kundenavn.GetHashCode() ^ this.Kontonr.GetHashCode();
    }
}

Læg mærke til at jeg kun sammenligner Kundenavn og kontonr i Equals metoden, dvs at selvom 2 duplikater har forskellig saldo, vil de alligevel tolkes samme kunde. Dette kan du eksperimentere med, så det passer best til dit projekt.

Nu kan du fjerne duplikater med 1 linje kode:
List<Kunde> distinctList = kundelisteMedDuplikater.Distinct().ToList();


Herunder er et fuldt test-eksempel, som viser resultatet i en combobox. Eksemplet overrider formens OnLoad metode.:

protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            List<Kunde> kundeList = new List<Kunde>();
            kundeList.Add(new Kunde { Kundenavn = "test", Kontonr = "123", Saldo = 100 });
            kundeList.Add(new Kunde { Kundenavn = "test", Kontonr = "123", Saldo = 100 });
            kundeList.Add(new Kunde { Kundenavn = "test2", Kontonr = "123", Saldo = 100 });
            kundeList.Add(new Kunde { Kundenavn = "test2", Kontonr = "123", Saldo = 100 });
            kundeList.Add(new Kunde { Kundenavn = "test3", Kontonr = "123", Saldo = 100 });
            kundeList.Add(new Kunde { Kundenavn = "test3", Kontonr = "123", Saldo = 100 });
            kundeList.Add(new Kunde { Kundenavn = "test4", Kontonr = "123", Saldo = 100 });
            kundeList.Add(new Kunde { Kundenavn = "test4", Kontonr = "123", Saldo = 100 });
            kundeList.Add(new Kunde { Kundenavn = "test5", Kontonr = "123", Saldo = 100 });

            List<Kunde> distinctList = kundeList.Distinct().ToList();
            this.comboBox1.DataSource = distinctList;
            this.comboBox1.DisplayMember = "Kundenavn";
        }
Avatar billede olesen85 Nybegynder
23. februar 2011 - 11:39 #2
tak for hjælpen:) smid et svar så du kan få dine point :)
Avatar billede aaberg Nybegynder
23. februar 2011 - 12:29 #3
svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB