Kiedy słownik jest wyliczany, zwróci KeyValuePair<TKey,TValue>
obiekty ... więc wystarczy określić „Wartość” i „Klucz” odpowiednio dla DataTextField
i DataValueField
, 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:
list.Add(cul.DisplayName, cod);
(A następnie , oczywiście, zmieniając powiązanie na „Klucz” dla DataTextField
i „Wartość” dla DataValueField
).
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>>
:
string[] languageCodsList = service.LanguagesAvailable();
var list = new List<KeyValuePair<string, string>>();
foreach (string cod in languageCodsList)
{
CultureInfo cul = new CultureInfo(cod);
list.Add(new KeyValuePair<string, string>(cul.DisplayName, cod));
}
Alternatywnie użyj listy zwykłych CultureInfo
wartości. LINQ sprawia, że jest to naprawdę łatwe:
var cultures = service.LanguagesAvailable()
.Select(language => new CultureInfo(language));
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();
Jeśli nie używasz LINQ, nadal możesz używać normalnej pętli foreach:
List<CultureInfo> cultures = new List<CultureInfo>();
foreach (string cod in service.LanguagesAvailable())
{
cultures.Add(new CultureInfo(cod));
}
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();