[WindowsForms] Nie działa metoda SelectedIndex w połączeniu z bazą danych


(rafalski) #1

Witam!
Posiadam w projekcie kontrolkę ComboBox1. Wypełniona jest ona danymi z bazy danych. Chciałbym przygotować formularz do edycji, w taki sposób by zaznaczyła się odpowiednia pozycja w ComboBox1. Niestety właściwość SelectedIndex nie działa. Proszę o pomoc.


(Fizyda) #2

W ciemno zgaduję, że indeks z bazy danych nie pokrywa się z indeksem danego obiektu w ComboBoxie, znajdź najpierw ID w ComboBoxie obiektu którego chcesz wybrać.


(rafalski) #3

Wprowadzenie jakiejkolwiek wartości skutkuje tym iż zaznaczony jest pierwszy element. DataSurce i DisplayMember wypełnione z poziomu formatki we właściwościach kontrolki. Kontrolka posiada także styl DropDownList. Natomiast IndexSelected nie działa z poziomu kodu.


(kowgli) #4

Co dokładnie rozumiesz przez “nie działa”. Wklej kawałek kodu. Może coś robisz w złej kolejności?
No i temat powinien mieć [WindowsForms] w tytule, a nie C#, bo z językiem ma to niewiele wspólnego.

@Fizyda - SelectedIndex to po prostu numer elementu w liście. Źródło danych nie ma znaczenia. To nie jest SelectedValue lub SelectedItem.

… po zastanowieniu… może właśnie z tym jest problem. Mylisz SelectedIndex z SelectedValue.
SelectedIndex to po prostu kolejne numery 0,1,2,3,4 i tyle. Jeśli wybierzesz 3 opcję od góry to SelectedIndex będzie 2. Bez znaczenia jaki obiekt jest podstawiony jako element.
Może rozwiązaniem jest użycie SelectedValue (pamiętaj o ustawieniu ValueMember w kontrolce).


(rafalski) #5

Rozumiem opisany przez Ciebie problem, ale jakiej wartości bym nie wstawiał to SelectedIndex nie działa. Podobnie jest z SelectedValue, po mimo tego iż ustawiam w kontrolce ValueMember też jest problem.

Przykładowo w ustawieniach kontrolki we właściwościach:
SelectedIndex: dzwiekBindingSource - Id_dzwieku
SelectedItem: dzwiekBindingSource - Nazwa_dzwieku
SelectedValue: dzwiekBindingSource - Nazwa_dzwieku
DataSource: dzwiekBindingSource
DisplayMember: Nazwa_dzwieku
ValueMember: Id_dzwieku

Noi przykładowo z kodu nie działa mi:
listBox1.SelectedValue = “nazwa”;
ani
listBox1.SelectedIndex = 1;
itd.


(rafalski) #6

Oj już się chyba zgubiłem. Chodzi o to, że mam formularz w którym z listbox wybieram nazwę dźwięku i klikam dodaj do bazy :slight_smile: Następnie mam przycisk modyfikuj którym pobieram dane do kontrolek i za cholerę nie mogę zrobić zaznaczenia konkretnego elementu w listbox.


(Fizyda) #7

Ja nie wiem co Ty robisz, zadałeś pytanie tak, a nie inaczej i uzyskałeś adekwatną do informacji odpowiedź. To że oczekujesz innego efektu bo robisz coś innego to już nie moja wina.
Ja sobie wyobraziłem, że do comboboxa ładujesz jakieś comboboxitemy generowane z danych które siedzą w bazie danych - np. lista marek samochodowych o wewnętrznych ID. Następnie chcesz w swoim kodzie zaznaczyć konkretny wybór dla tego comboboxa, tylko że posługujesz się ID z bazy danych.


(rafalski) #8

Dokładnie mi o to chodzi :slight_smile: Użytkownik w listboxie wybiera markę samochodu, zapisuje do bazy. Potem chce zmodyfikować i otwiera mu się formularz gdzie jest w listboxie zaznaczona konkretna marka :slight_smile: Ja w fazie testów w kodzie wpisywałem z palca dowolne wartości i cokolwiek wpisałem zawsze w listbox był zaznaczony pierwszy element. Bo rozumiem że jeżeli mam:
audi
peugeot
citroen
renault

to listobox1.SelectedIndex = 2 powinno zaznaczyć mi citroen, a niestety zaznaczenie stoi na pierwszym elemencie


(Fizyda) #9

A czy na pewno robisz to w dobrej kolejności? Tj. najpierw dodajesz itemsy a potem ustawiasz selected.
Pokaż kod w którym to wszystko robisz.


(rafalski) #10

Co się naszukałem w Internecie i się nakombinowałem, a tymczasem Fizyda rozwiązanie okazało się banalnie proste. Itemsy dodawałem z poziomu właściwości kontrolki, a ustawiałem selected przy tworzeniu formy co okazało się błędem. Fizyda dzięki wielkie :slight_smile:


(Fizyda) #11

Zdarza się, a z doświadczenia uczelnianego wiem, że wiele osób nie ogarnia tego jak wygląda cykl życia aplikacji okienkowych, a przynajmniej gubią się w tym co w jakiej kolejności się wykonuje. A w tedy bardzo łatwo zrobić coś w nieodpowiedniej kolejności i błędu można szukać całymi dniami.