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.
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";
}