Lorsqu'un dictionnaire est énuméré, il produira des KeyValuePair<TKey,TValue>
objets ... il vous suffit donc de spécifier "Valeur" et "Clé" pour DataTextField
et DataValueField
respectivement, pour sélectionner les propriétés Valeur / Clé .
Grâce au commentaire de Joe, j'ai relu la question pour trouver le bon chemin. Normalement, je m'attendrais à ce que la "clé" dans le dictionnaire soit le texte affiché et la "valeur" soit la valeur extraite. Cependant, votre exemple de code les utilise dans l'autre sens. À moins que vous n'en ayez vraiment besoin, vous voudrez peut-être envisager d'écrire votre code comme suit:
list.Add(cul.DisplayName, cod);
(Et puis en changeant la liaison pour utiliser "Key" pour DataTextField
et "Value" pour DataValueField
, bien sûr.)
En fait, je suggérerais que, comme il semble que vous voulez vraiment une liste plutôt qu'un dictionnaire, vous voudrez peut-être reconsidérer l'utilisation d'un dictionnaire en premier lieu. Vous pouvez simplement utiliser un 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));
}
Vous pouvez également utiliser une liste de CultureInfo
valeurs simples . LINQ rend cela très simple:
var cultures = service.LanguagesAvailable()
.Select(language => new CultureInfo(language));
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();
Si vous n'utilisez pas LINQ, vous pouvez toujours utiliser une boucle foreach normale:
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();