Temat: Porównanie danych z Combobox ze stringiem

Witam,

proszę o podpowiedź ...
Chcę porównać wartości z Combobox ze stringiem i zapamiętać id tej pozycji z listy item'ów.
Problem występuję w momencie gdy dane pobierane są z bazy, bo zamiast oczekiwanego stringa mam System.Data.DataRowViwe.

Na Combobox'ie ustawiam:


cb.DataSource = ds.Tables[0];
cb.ValueMember = "nazwa";


Następnie iteruje po liście:


int index = -1;
for (int i = 0; i < cb.Items.Count; i++)
{

if (cb.Items[i].ToString() == searchString)
{ index = i; break;}
}




W cb.Items[i].ToString() jest przechowywana treść System.Data.DataRowViwe.
Wnioskuję, że w tym momencie nie ma jeszcze wiązania.

Temat: Porównanie danych z Combobox ze stringiem

Źle wnioskujesz i wynik dostajesz prawidłowy.

Bindujesz tabelę czyli w Items masz wiersze tabeli dlatego dostajesz DataRowView.
Combobox na liście pokazuje to co chcesz bo kolumnę do wyświetlenia ustawiasz tym:
cb.ValueMember = "nazwa";


Chociaż powinno być tak:

cb.DisplayMember= "nazwa";
cb.ValueMember = "wartosc";


Twoje rozwiązanie:

if (((DataRowView)cb.Items[i]).Row["nazwa"].ToString() == searchString)


ale możesz zrobić też tak:

index = cb.FindString("nazwa");


Z tym, że musisz uważać, ponieważ metoda FindString zwraca indeks pierwszego elementu w ComboBox rozpoczynającego się od określonego ciągu znaków.

Temat: Porównanie danych z Combobox ze stringiem

Dziękuję Ci serdecznie ...
Zgadza się oba rozwiązania są poprawne.
Przyznam, że próbowałam korzystać z FindString, FindStringExact ale nie przynosiło rezultatu - chyba jeszcze coś innego miało na to wpływ. W obecnym kodzie sprawdziłam i działa.

Wcześniej zastanawiałam się też nad wczytywaniem wartości do DataRow, a następnie dodawaniem do Combobox'a i równocześnie porównywaniem stringów.
Choć takie podejście wydawało mi się skomplikowane w porównaniu do tego co mam otrzymać. Zazwyczaj w prostocie rozwiązań "siła".



Wyślij zaproszenie do