Chcę ustawić DataTextField
i DataValueField
z Dropdownlist
(languageList) stosując słowniku (wykaz) languageCod
(en-GB) jako klucz i nazwy języków (angielski) jako tekstu do wyświetlenia.
Odpowiedni kod:
string[] languageCodsList= service.LanguagesAvailable();
Dictionary<string, string> list =
new Dictionary<string, string>(languageCodsList.Length);
foreach (string cod in languageCodsList)
{
CultureInfo cul = new CultureInfo(cod);
list.Add(cod, cul.DisplayName);
}
languageList.DataSource = list;
languageList.DataBind();
Jak mogę ustawić DataTextField
i DataValueField
?
c#
dictionary
drop-down-menu
VansFannel
źródło
źródło
Dictionary<TKey, TValue>
, ale możeList<T>
.Kiedy słownik jest wyliczany, zwróci
KeyValuePair<TKey,TValue>
obiekty ... więc wystarczy określić „Wartość” i „Klucz” odpowiednio dlaDataTextField
iDataValueField
, aby wybrać właściwości Wartość / Klucz .Dzięki komentarzowi Joe ponownie przeczytałem pytanie, aby ująć je we właściwy sposób. Normalnie oczekiwałbym, że „klucz” w słowniku będzie wyświetlanym tekstem, a „wartością” będzie pobrana wartość. Twój przykładowy kod używa ich jednak w drugą stronę. O ile naprawdę nie potrzebujesz ich w ten sposób, możesz rozważyć napisanie swojego kodu jako:
(A następnie , oczywiście, zmieniając powiązanie na „Klucz” dla
DataTextField
i „Wartość” dlaDataValueField
).W rzeczywistości sugerowałbym, że ponieważ wydaje się, że naprawdę potrzebujesz listy, a nie słownika, możesz w pierwszej kolejności rozważyć ponowne użycie słownika. Możesz po prostu użyć
List<KeyValuePair<string, string>>
:Alternatywnie użyj listy zwykłych
CultureInfo
wartości. LINQ sprawia, że jest to naprawdę łatwe:Jeśli nie używasz LINQ, nadal możesz używać normalnej pętli foreach:
źródło
Jeśli DropDownList jest zadeklarowana na stronie aspx, a nie w kodzie, możesz to zrobić w ten sposób.
.aspx:
.aspx.cs:
źródło
Po prostu użyj „Klucz” i „Wartość”
źródło