[.NET/C#] Items adden aan een combo met extra info

Pagina: 1
Acties:
  • 153 views sinds 30-01-2008
  • Reageer

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Ok, alweer een vraagje ivm C# van mijnentwege :)

Ik heb een combobox die ik wil opvullen met bepaalde waarden, bv Belgie, Nederland, Frankrijk. Geen probleem, hiervoor gebruik ik gewoon
code:
1
LandComboBox.Items.Add("Belgie"); ...

Nu wil ik per item dat ik 'add' extra informatie bij dat item opslaan (een uniek id), maar die info mag niet zichtbaar zijn. Ik kan dit doen door een user-defined type (een class inheriten van object, met daarin als member variablen het unieke id en de string die moet getoond worden):
code:
1
2
ItemInfo = new MyType(1, "Belgie");
LandComboBox.Items.Add(ItemInfo);

Ook dit werkt zonder problemen, maar hier komt het probleem:
Ik kan nu wel weten welke tekst er geselecteerd is in de combobox, maar ik wil weten welk id er mee overeen stemt.

In Delphi kon ik doen:
code:
1
LandComboBox.Items.AddObject("Belgie", TObject(1));

en dan kon ik mbhv de ItemIndex en IndexOf properties en methods wel gaan weten welk id de geselecteerde tekst had. Hoe kan ik dit in C# oplossen? Ik zit er nu al een tijd op te zoeken maar heb nog geen bevredigend resultaat gevonden.
Ik wil niet met nog een 2de, hidden combobox werken of met een extra Array of ArrayList

https://fgheysels.github.io/


Verwijderd

MyType ItemInfo = LandComboBox.SelectedItem;
int IDOfSelected = MyType.ID;

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Aaargh, stom van mij. Natuurlijk, SelectedItem dat ik daar niet op gebotst ben.
Maarja, dat komt ervan zeker als je er uren mee bezig bent.

thx. :)

https://fgheysels.github.io/


Verwijderd

Op woensdag 13 maart 2002 17:39 schreef whoami het volgende:
Aaargh, stom van mij. Natuurlijk, SelectedItem dat ik daar niet op gebotst ben.
Maarja, dat komt ervan zeker als je er uren mee bezig bent.

thx. :)
Gewoon in de docs kijken :) Refence, class library, System.Windows.Forms, Combobox Class. MS organiseert zn docs wel op een zodanige manier dat je daar iig altijd info kunt vinden over alle properties, methods etc. dus gewoon daar eerst checken. Anders ben je idd lang bezig :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Op woensdag 13 maart 2002 18:38 schreef Otis het volgende:

[..]

Gewoon in de docs kijken :) Refence, class library, System.Windows.Forms, Combobox Class. MS organiseert zn docs wel op een zodanige manier dat je daar iig altijd info kunt vinden over alle properties, methods etc. dus gewoon daar eerst checken. Anders ben je idd lang bezig :)
Ik doe niet anders. :) Maar ik had er gewoon overgekeken.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Ok, het geselecteerde item bepalen lukt nu wel, maar ik bots nu op een ander probleem.
Hoe kan ik nu aan de hand van m'n id het juiste item gaan selecteren?
Maw, ik laad klantgegevens uit m'n databank. In die klantgegevens zit er een veld 'landid'. Hoe kan ik nu aan de hand van enkel dat landid het juiste land in die combobox geselecteerd krijgen?

https://fgheysels.github.io/


Verwijderd

Je kan toch gewoon met een loopje alles langsgaan en de id's vergelijken :? Veel simpeler lijkt me niet mogelijk, of je moet keys kunnen toekennen aan ComboItems. Dan geef je elk item gewoon als key 'a{ID}' en dan selecteer je gewoon het goede item.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Ik heb ondertussen zelf de oplossing gevonden;

Om m'n combobox op te vullen gebruik ik nu een ArrayList object dat ik opvul met de gegevens uit m'n databank.
Hieronder zie je de code van de functie die hiervoor verantwoordelijk is:
code:
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
class ListObject
{
   private string m_Text;
   private int    m_Key;

   public string Text
   {
    get { return m_Text; } set { m_Text = value; }
     
   }
   public int Key;
   {
    get { return m_Key; } set { m_Key = value; }
   }
   
   public override string ToString()
   {
    return Text;
   }
}


public static void LaadCombobox(ComboBox cb, OleDbDataReader dr)
{
  ArrayList ComboItems = new ArrayList();

  while(dr.Read())
  {
     ListObject  NewObject;
     NewObject = new ListObject();
     NewObject.Key = (int)dr[0];
     NewObject.Text = (string)dr[1];

     ComboItems.Add(NewObject);
  }

  cb.DataSource = ComboItems;
  cb.ValueMember = "Key";
  cb.DisplayMember = "Text";
  dr.Close();
}

Om de juiste waarde te selecteren in m'n combobox, gebruik ik dan:
code:
1
PostcodeCombobox.SelectedValue = (int)dr["KlantPostcodeId"];

https://fgheysels.github.io/


Verwijderd

Op donderdag 14 maart 2002 09:05 schreef whoami het volgende:
Ik heb ondertussen zelf de oplossing gevonden;
code:
1
2
3
4
5
6
7
8
9
10
11
class ListObject
{
   private string m_Text;

   ...

   public override string ToString()
   {
    return Text;
   }
}
tik foutje :? Moet denk ik m_Text zijn ;). Verder zijn die get/sets tamelijk ranzif opgemaakt...

maar voor de rest ziet het er logisch uit >:)

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Op donderdag 14 maart 2002 09:44 schreef KoenM het volgende:

[..]

tik foutje :? Moet denk ik m_Text zijn ;). Verder zijn die get/sets tamelijk ranzif opgemaakt...
Nee hoor, ik gebruik gewoon m'n property...
maar voor de rest ziet het er logisch uit >:)
Logisch, idd, maar uiteindelijk werkt het toch niet.
Ik kan m'n combobox wel goed opvullen, maar als ik dan doe
code:
1
Combobox.SelectedValue = 5;

Dan krijg ik een exception : object reference not set to an instance of an object

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Ok, ik heb het nu uiteindelijk volledig werkend gekregen.
De code die ik hierboven gepost had is volledig juist, maar ik had het hier in m'n programma opgelost zonder properties in m'n class ListObject. Het veld Text en Key waren gewoon public members en op die manier werkte het niet. Ik heb het dan eens veranderd, van Text en Key private members gemaakt en public properties geimplementeerd (net zoals in de code die ik hierboven gepost heb) en dan werkt het wel.

Ik vind het wel raar dat het niet werkt als je geen gebruik maakt van properties.

https://fgheysels.github.io/

Pagina: 1