Jak można odczytać numer zaznaczonego elementu w Combobox?

0

Czy da się wyciągnąć numer porządkowy zaznaczonego elementu w combobox-ie?

private ComboBox cars = new ComboBox();

number.Items.Add("bmw");
number.Items.Add("taxi");
//(...)

0

CombobBox.SelectedIndex zły?

0

Ano zły, bo mi zależy na odnalezieniu konkretnego elementu, nawet jeśli jego reprezentacja w combobox jest identyczna jak dla kilku innych. Przykładowo mamy:

number.Items.Add("one"); number.Items.Add("two"); number.Items.Add("one"); ```

Korzystając z

if(numbers.SelectedItem.ToString() == "one"){}; ```

nie jesteśmy w stanie odróżnić, który faktycznie element został wskazany.

Przykład może wydawać się absurdalny, ale ma jasne przełożenie na rzeczywistość. Wystarczy założyć, że wartości prezentowane w combobox są popierane z puli obiektów. W takie sytuacji możemy nie mieć zapewnionej unikalności i metoda zwrócić wskazanie do niepoprawnego elementu. Ktoś wie jak rozwiązać taki problem?

0

To ja już nic nie rozumiem.

Są właściwości:

  • SelectedItem - wybrany obiekt;
  • SelectedValue - wartość (unikalna) dla zbindowanych danych (np. id z bazy);
  • SelectedIndex - numer (licząc od zera) wybranego elementu. Oczywiście jest to liczba w ramach pozycji w ComboBoxie, niemająca nic wspólnego z bazodanowym id.

Jeśli obiekty są pobrane z bazy (np. klasa Student z właściwościami NrAlbumu i Nazwisko), to trzeba użyć bindowania, jako DisplayMember ustawić Nazwisko, a jako ValueMember: NrAlbumu i w celu pobrania rzeczywistej identyfikatora odwołać się przez SelectedValue - zadziała nawet dla dwóch Kowalskich na liście.

0

Mam problem z comboboxem. Wczytuję do niego dane z tabeli. Podpinam DataSource, DisplayMember oraz ValueMember w którym zapisuję Id z bazy.
Chcę zapisać do zmiennej DokumentId typu int wartość zaznaczonego elementu w cb.
Robię to tak:
DokumentId = (int)cb.SelectedValue; i w momencie odczytu z cb otrzymuję błąd" Określone rzutowanie jest nieprawidłowe.
gdy robię tak:
DokumentId = Convert.ToInt32(cb.SelectedValue); to wywala Nie można rzutować obiektu typu System.DataRowView na typ System.IConvertible

a gdy zrobię tak
label.Text = cb.SelectedValue.ToString(); to wszystko ładnie działa.

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