Visual C++ Indeksowanie w ComboBox

0

Witam. Czy w Combobox istnieje wbudowany mechanizm indeksowania?
Chodzi mi o coś takiego jak <select> w HTML. Korzystam z bazy danych więc coś takiego było by bardzo przydatne. Np odpowiedz z zapytania "SELECT id, wartosc FROM tabela" dostaje:

id - wartosc

54 - wartosc5
78 - wartosc2
3 - wartosc2
8 - wartosc10
...

A w combobox przy włączonym sortowaniu (oczywiście id nie wpływa na kolejność wyświetlania watosci):
wartosc2
wartosc2
wartosc5
wartosc10

I wybierając którąś wartość mam od razu jej ID oraz jestem w stanie rozróżnić o którą wartosc2 chodzi.

0

Zakładam, że piszesz to w MFC. Jeżeli tak to klasa CComboBox ma metody GetItemData/SetItemData, którą można taką funkcjonalność zrealizować: http://msdn.microsoft.com/en-us/library/0ekb53ey%28v=vs.80%29.aspx

0

Tak program powstaje w MFC. Chodziło mi o coś takiego jak SetItemData + GetItemData. Choć nie jest to idealne rozwiązanie ponieważ ID(z bazy danych) przypisuje się pozycji na liście a nie konkretnemu elementowi (konkretnej wartości) na stałe.
Korzystam z automatycznego sortowania(włączona opcja sort) a więc po dodaniu nowej wartości do listy nastąpi przesortowanie, część elementów zmieni swoją pozycję, jednak ID nie zmieni się bedzie przypisana do pozycji przed sortowaniem.
Wiec część z elementów będzie miała podmienione ID.

Oczywiście można temu zapobiec pisząc dodatkową funkcję, ewentualnie jeśli wiemy ze nowa wartość pochodzi z bazy danych zawsze można utworzyć całą listę od nowa korzystając w zapytaniu z dyrektywy "ORDER BY" czyli sortującą. W takim przypadku sortowanie w programie nie będzie konieczne, można opcje sort wyłączyć.

Chyba ze istnieje jeszcze jakieś inne rozwiązanie przypisujące ID konkretnemu elementowi a nie pozycji na liście.

0

Trochę się mylisz. Te dane są przypisane do konkretnego elementu w comboboxie, a nie do jego indeksu. Jak dodajesz element do comboboxa, to funkcja zwraca jego aktualny index. Od razu odpalasz SetItemData dla tego indeksu. Po dodaniu kolejnych elementów przypisane dane przez SetItemData się nie zmieniają(nie nastąpi przetasowanie)

1 użytkowników online, w tym zalogowanych: 0, gości: 1