Ik weet het, enorm slechte titel. Als iemand een betere omschrijving weet...
Een ListBox/ComboBox kun je bijvoorbeeld omschrijven als een array van strings. Als je op een item uit de lijst klikt en deze onderschept met een SelectedIndexChanged dan geeft de index van de lijst het geselecteerde element weer. Logisch...
Maar ik vul de lijst uit een database en de indexen van de lijst houden eigenlijk geen verband met de indexen uit mijn database. Dus wanneer ik het eerste item uit de lijst selecteer krijg ik netjes index 0 terug, maar daar ben ik niets mee. Ik wil de index die het item in mijn database heeft koppelen aan de lijst.
Bij een ListView is dat eenvoudig. Daar is elk item een ListViewItem waar je bijvoorbeeld de database index aan het .Tag veld kunt toekennen die je dan verder gebruikt ipv de lijst index. Ik zoek iets soortgelijks waarbij ik extra niet-zichtbare waardes kan toekennen per rij in een ListBox/ComboBox. Maar de ListBox/ComboBox schijnt zoiets niet te kennen.
Je zou natuurlijk kunnen zeggen, vergeet die indexen en lees gewoon de waardes zelf uit (de zichtbare strings in de lijst). Maar dat vind ik persoonlijk geen goede oplossing omdat die waardes in de database regelmatig veranderen. De waardes zouden dus al tijdens het gebruik van de lijst kunnen wijzigen wat natuurlijk problemen oplevert. De indexen daarentegen veranderen niet (tenzij ze verwijderd zijn, maar dat is makkelijk op te vangen).
Nog even wat grafischer voorgesteld. Hieronder een voorbeeldlijstje dat ik ophaal uit de database en in een ComboBox weergegeven moet worden.
Hoe los ik dit op?
Een ListBox/ComboBox kun je bijvoorbeeld omschrijven als een array van strings. Als je op een item uit de lijst klikt en deze onderschept met een SelectedIndexChanged dan geeft de index van de lijst het geselecteerde element weer. Logisch...
Maar ik vul de lijst uit een database en de indexen van de lijst houden eigenlijk geen verband met de indexen uit mijn database. Dus wanneer ik het eerste item uit de lijst selecteer krijg ik netjes index 0 terug, maar daar ben ik niets mee. Ik wil de index die het item in mijn database heeft koppelen aan de lijst.
Bij een ListView is dat eenvoudig. Daar is elk item een ListViewItem waar je bijvoorbeeld de database index aan het .Tag veld kunt toekennen die je dan verder gebruikt ipv de lijst index. Ik zoek iets soortgelijks waarbij ik extra niet-zichtbare waardes kan toekennen per rij in een ListBox/ComboBox. Maar de ListBox/ComboBox schijnt zoiets niet te kennen.
Je zou natuurlijk kunnen zeggen, vergeet die indexen en lees gewoon de waardes zelf uit (de zichtbare strings in de lijst). Maar dat vind ik persoonlijk geen goede oplossing omdat die waardes in de database regelmatig veranderen. De waardes zouden dus al tijdens het gebruik van de lijst kunnen wijzigen wat natuurlijk problemen oplevert. De indexen daarentegen veranderen niet (tenzij ze verwijderd zijn, maar dat is makkelijk op te vangen).
Nog even wat grafischer voorgesteld. Hieronder een voorbeeldlijstje dat ik ophaal uit de database en in een ComboBox weergegeven moet worden.
code:
Als ik bv "Zwart" selecteer dan wil ik database index 5 terugkrijgen en NIET lijst index 3 (staat op positie 3 in de ComboBox). Nou ja, SelectedIndexChanged mag gerust 3 teruggeven, zolang ik in die functie aan de hand van die 3 maar de echte database index 5 kan achterhalen.1
2
3
4
5
6
| idx waarde 3 Rood 2 Groen 1 Blauw 5 Zwart 4 Wit |
Hoe los ik dit op?