110 votes

DropDownList c# avec un dictionnaire comme source de données

Je tiens à mettre et d’un (languageList) à l’aide d’un dictionnaire (liste) des (fr-fr) comme nom de clé et de la langue (anglais) comme le texte à afficher.

Code correspondant :

Comment puis-je définir et ?

204voto

Canavar Points 29161

Comme ça vous pouvez définir les propriétés DataTextField et DataValueField du contrôle DropDownList à l’aide de textes « Key » et « Valeur » :

10voto

Jon Skeet Points 692016

Lorsqu'un dictionnaire est énuméré, il donnera KeyValuePair<TKey,TValue> objets... donc vous avez juste besoin de spécifier la "Valeur" et "Clé" pour DataTextField et DataValueField , respectivement, pour sélectionner la Valeur/Clé de propriétés.

Merci à Joe commentaire, j'ai relu la question pour obtenir ces dans le bon sens. Normalement, je m'attends à de la "clé" dans le dictionnaire pour la le texte qui s'affiche, et la "valeur" à la valeur par les cheveux. Votre exemple de code utilise dans l'autre sens. À moins que vous vraiment besoin d'eux pour être de cette façon, vous pourriez envisager l'écriture de votre code:

list.Add(cul.DisplayName, cod);

(Et puis en modifiant la liaison à l'utilisation de la "Clé" pour DataTextField et de la "Valeur" pour DataValueField, bien sûr.)

En fait, je suggérerais que, comme il semble vraiment vous voulez une liste plutôt qu'un dictionnaire, vous pouvez vouloir reconsidérer l'aide 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 plain CultureInfo valeurs. 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 n'êtes pas à l'aide de LINQ, vous pouvez toujours utiliser une normale boucle 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();

6voto

Matt Frear Points 6287

Si le contrôle DropDownList est déclarée dans votre page aspx et non dans le codebehind, vous pouvez le faire comme ça.

.aspx :

. aspx.cs :

5voto

user98296 Points 89

Il suffit d’utiliser « Key » et « Valeur »

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X