Wenn ein Wörterbuch aufgezählt wird, wird es ergeben KeyValuePair<TKey,TValue>
Objekte ... so dass Sie nur angeben müssen „Value“ und „Key“ für DataTextField
und DataValueField
jeweils die Auswahl Wert / Schlüsseleigenschaften.
Dank Joes Kommentar habe ich die Frage noch einmal gelesen, um diese richtig zu machen. Normalerweise würde ich erwarten, dass der "Schlüssel" im Wörterbuch der angezeigte Text und der "Wert" der abgerufene Wert ist. Ihr Beispielcode verwendet sie jedoch umgekehrt. Wenn Sie sie nicht wirklich so benötigen, sollten Sie Ihren Code wie folgt schreiben:
list.Add(cul.DisplayName, cod);
(Und dann die Bindung ändern , um natürlich "Schlüssel" für DataTextField
und "Wert" für zu verwenden DataValueField
.)
Tatsächlich würde ich vorschlagen, dass Sie, da es so aussieht, als ob Sie wirklich eine Liste anstelle eines Wörterbuchs möchten, die Verwendung eines Wörterbuchs zunächst überdenken möchten. Sie könnten einfach ein 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));
}
Verwenden Sie alternativ eine Liste mit einfachen CultureInfo
Werten. LINQ macht das wirklich einfach:
var cultures = service.LanguagesAvailable()
.Select(language => new CultureInfo(language));
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();
Wenn Sie LINQ nicht verwenden, können Sie dennoch eine normale foreach-Schleife verwenden:
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();