Lorsqu'un dictionnaire est recensée, elle donnera KeyValuePair<TKey,TValue>
objets ... alors vous avez juste besoin de préciser « valeur » et « clé » pour respectivement DataTextField
et DataValueField
, pour sélectionner les Value/Key propriétés.
Grâce au commentaire de Joe, j'ai relu la question pour obtenir les bonnes réponses. Normalement, je m'attendrais à ce que la "clé" du dictionnaire soit le texte affiché et la "valeur" à extraire. Votre exemple de code les utilise cependant dans l'autre sens. À moins que vous avez vraiment besoin d'être de cette façon, vous voudrez peut-être envisager d'écrire votre code comme:
(Et puis en changeant la liaison à utiliser « clé » pour DataTextField
et « Value » pour DataValueField
, bien sûr.
En fait, je suggère que, comme il semble que vous voulez vraiment une liste plutôt qu'un dictionnaire, vous pourriez vouloir reconsidérer en utilisant 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 valeurs CultureInfo
simples. LINQ fait vraiment facilement:
var cultures = service.LanguagesAvailable()
.Select(language => new CultureInfo(language));
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();
Si vous ne l'utilisez 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();
Je vous recommande de définir TextField sur "key" et ValueField sur Value. Je pense que c'est plus intuitif. – MGOwen
@MGOwen Il peut être _seem_ intuitif de définir DataValueField à Value, en raison de la "valeur" commune, mais il est en fait illogique dans l'utilisation régulière de la structure de données/contrôle. Pour plus de détails à ce sujet, voir mon commentaire sur la réponse de Jon Skeet. – Dani
Je ne vois pas une liste.Ajoute que cela prend 2 args .. un seul qui prend un arg. est ce winforms ?? – hrh