Kiedy słownika wymienił, to wydajność KeyValuePair<TKey,TValue>
obiektów ... więc po prostu trzeba określić „wartość” i „klucz” do DataTextField
i DataValueField
odpowiednio wybrać Value/Key właściwości.
Dzięki komentarzowi Joe ponownie przeczytałem pytanie, aby uzyskać te informacje we właściwy sposób. Normalnie spodziewam się, że "klucz" w słowniku będzie tekstem wyświetlanym, a "wartością" będzie wartość pobrana. Twój przykładowy kod używa ich jednak odwrotnie. Chyba, że naprawdę ich potrzebują być w ten sposób, to może warto rozważyć pisania kodu jako:
(A potem zmienia wiązanie używać „klucz” dla DataTextField
i „wartość” dla DataValueField
, oczywiście.)
W rzeczywistości sugeruję, że tak naprawdę wygląda na to, że chcesz raczej mieć listę niż słownik, więc możesz najpierw rozważyć użycie słownika. można 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 listę zwykły CultureInfo
wartości. LINQ czyni to bardzo proste:
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, można nadal korzystać z 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();
Polecam ustawienie TextField na "key" i ValueField na wartość. Myślę, że to jest bardziej intuicyjne. – MGOwen
@MGOwen Może to być intuicyjne, aby ustawić DataValueField na wartość, ze względu na wspólną "wartość", ale w rzeczywistości jest nielogiczne w regularnym korzystaniu z bazy danych/kontroli. Aby uzyskać szczegółowe informacje na ten temat, zobacz mój komentarz na temat odpowiedzi Jona Skeeta. – Dani
Nie widzę listy.Dodano, że ma 2 argumenty .. tylko jeden, który ma jeden argument. czy to jest winForm? – hrh