Tel: 600283424
ComboBox C# WPF – Add Items, Text oraz Value
PerfectSoft > Baza wiedzy > C# > ComboBox C# WPF – Add Items, Text oraz Value

ComboBox C# WPF – Add Items, Text oraz Value

EN

Poniższy wpis dotyczy dodawania wierszy do kontrolki ComboBox C# WPF. Przedstawione przykłady odnoszą się do kontrolki o nazwie „comboPerson”.



Dodawanie rekordu do ComboBox C# WPF

Dodawanie kolejnego wiersza w ComboBox’ie realizowane jest za pomocą funkcja Items.Add(); Jako argument należy podać nowy obiekt (Item), który może być po prostu String’iem.


A więc komenda comboPerson.Items.Add(„Napis”); spowoduje dopisanie nowego wiersza o wartości „Napis” do kontrolki o nazwie „comboPerson”. Uzupełnienie listy można więc zrealizować poprzez komendy:


comboPerson.Items.Add(„Napis1”);
comboPerson.Items.Add(„Napis2”);
comboPerson.Items.Add(„Napis3”);

Dodawanie rekordów w pętli


Oczywiście ręczne wpisywanie każdego elementu byłoby czasochłonne i uciążliwe, dlatego warto wykorzystać do tego zadania pętlę.


Przed przystąpieniem do uzupełniania danych można wyczyścić istniejące już wpisy, ma to znaczenie gdy dane odczytywane są np. z bazy danych i mogły ulec zmianie od poprzedniej operacji wczytywania – służy do tego funkcja Items.Clear().


Po uzupełnieniu ComboBox’a danymi chcielibyśmy by pojawiły się one w uruchomionym programie. Jeśli lista uległa zmianie to należy ją odświeżyć funkcją Refresh(), w przeciwnym wypadku użytkownik programu nie zobaczy zmian.


comboPerson.Items.Clear(); //Opróżnij comboPerson 

while (readPersons.Read()) 
{
comboPerson.Items.Add(readPersons.GetString(1));
}

comboPerson.Items.Refresh();//Odśwież kontrolkę w oknie programu

W powyższej pętli skorzystano z czytnika informacji z bazy danych, nazwanego tu „readPersons”, który w każdej iteracji pętli zwraca wartość string z kolumny nr 1 czytanej tabeli. Przedstawiony fragment kodu pozwolił na uzupełnienie ComboBox’a wszystkimi wartościami kolumny z wybranej tabeli.


Dodawanie rekordów z dwoma kolumnami


A co jeśli poza wartościami, interesują nas także indeksy (lub inny klucz główny) wybranej tabeli? Wtedy należy uzupełnić ją tymi informacjami, a wyświetlać tylko te elementy, które powinien zobaczyć użytkownik.


Do realizacji tego celu można wykorzystać klasę Dictionary, jest ona klasą kolekcji pozwalającą dodawać elementy do listy wraz z ich kluczami. Znajduje się ona w przestrzeni nazw System.Collections.Generic.


W deklaracji należy podać typ wprowadzanych danych np. Dictionary<int, string>, co oznacza, że w każdym wierszu pierwszy element będzie typu int, a drugi typu string. Oba elementy są zapisywane jako dwie kolumny o nazwach „Key” oraz „Value” i w ten sposób można się do nich odwoływać.
Różnica w kodzie polega na tym, że w pętli nie uzupełniamy nowymi rekordami ComboBox’a, ale właśnie kolekcję Dictionary i ostatecznie przypisujemy ją do ItemsSource ComboBox’a. Funkcja Clear() w takim przypadku spowoduje błąd, więc należy najpierw usunąć wartości z ItemsSource przez przyrównanie do null.


Poniższy kod przedstawia rozwinięcie poprzedniego przykładu.


comboPerson.ItemsSource = null;
this.comboPerson.Items.Clear();//Nie wolno używać gdy jest podpięty ItemsSource, chyba że jest null'em

System.Collections.Generic.Dictionary<int, string> comboSource = new System.Collections.Generic.Dictionary<int, string>();

while (readPersons.Read())
{
comboSource.Add(readPersons.GetInt32(2), readPersons.GetString(1));
}

comboPerson.ItemsSource = comboSource;//Przypisanie kolekcji do ComboBox'a
comboPerson.DisplayMemberPath = "Value";//Wybór kolumny do wyświetlenia

this.comboPerson.Items.Refresh();

Wybór kolumny, która zostanie wyświetlona na liście odbywa się za pomocą komendy comboPerson.DisplayMemberPath = „Value”; Ponieważ do ComboBox’a została przypisana kolejka Dictionary to do wyboru są tu tylko dwie kolumny o przedstawionych wcześniej nazwach „Key” oraz „Value”.


Odczyt wybranych wartości w ComboBox’ie


Gdy kontrolki zostały uzupełnione danymi to pozostaje już tylko odczyt wartości wybieranych przez użytkowników. Przykłady będą rzutowane na string by można je było wyświetlić np. w MessageBox’ie.


Odczytanie pełnego wiersza:


comboPerson.SelectedValue.ToString();
combobox c# wpf
combobox c# wpf

[2, Jan]
Wyświetli w nawiasie kwadratowym liczbę reprezentującą indeks i wartość string.


Do wyświetlenia wartości kolumny Key lub Value należy rzutować wybrany element ComboBox’a (SelectedItem) na KeyValuePair znajdujący się w przestrzeni nazw System.Collections.Generic co pozwoli na dostęp do pola:


Key

((System.Collections.Generic.KeyValuePair<int, string>)comboPerson.SelectedItem).Key.ToString();

Value

((System.Collections.Generic.KeyValuePair<int, string>)comboPerson.SelectedItem).Value.ToString();
×
Czy życzą sobie Państwo kontaktu z naszej strony?
TOP