Question

Je souhaite définir DataTextField et DataValueField d'une Dropdownlist (languageList) à l'aide d'un dictionnaire (liste) de languageCod (en-gb) comme clé et nom de langue (anglais) comme texte à afficher .

Code pertinent:

string[] languageCodsList= service.LanguagesAvailable();
Dictionary<string, string> list = 
                   new Dictionary<string, string>(languageCodsList.Length);

foreach (string cod in languageCodsList)
{
    CultureInfo cul = new CultureInfo(cod);
    list.Add(cod, cul.DisplayName);
}
languageList.DataSource = list;
languageList.DataBind();

Comment définir <=> et <=>?

Était-ce utile?

La solution

Ainsi, vous pouvez définir DataTextField et DataValueField de DropDownList à l’aide de " Key " et " Valeur " textes:

    Dictionary<string, string> list = new Dictionary<string, string>();
    list.Add("item 1", "Item 1");
    list.Add("item 2", "Item 2");
    list.Add("item 3", "Item 3");
    list.Add("item 4", "Item 4");

    ddl.DataSource = list;
    ddl.DataTextField = "Value";
    ddl.DataValueField = "Key";
    ddl.DataBind();

Autres conseils

Lorsqu'un dictionnaire est énuméré, il génère KeyValuePair<TKey,TValue> objets ... il vous suffit donc de spécifier " Valeur " et " clé " pour DataTextField et DataValueField respectivement, sélectionner la valeur / Propriétés de la clé .

Grâce au commentaire de Joe, j’ai relu la question pour bien comprendre les réponses. Normalement, je m'attendrais à la & Quot; touche & Quot; dans le dictionnaire, le texte affiché et la " valeur " être la valeur extraite. Votre exemple de code les utilise cependant dans l'autre sens. À moins que vous n'ayez vraiment besoin de cela, vous pouvez envisager d'écrire votre code comme suit:

list.Add(cul.DisplayName, cod);

(Et ensuite changer la liaison pour utiliser & "Clé &" pour List<KeyValuePair<string, string>> et & "Valeur &" pour , bien sûr.)

En fait, je suggérerais que, dans la mesure où il semble que vous souhaitiez réellement une liste plutôt qu'un dictionnaire, vous souhaiterez peut-être reconsidérer l'utilisation d'un dictionnaire. Vous pouvez simplement utiliser un CultureInfo:

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 simples <=>. LINQ rend cela vraiment facile:

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();

Si DropDownList est déclaré dans votre page aspx et non dans le codeBear, vous pouvez le faire comme ceci.

.aspx:

<asp:DropDownList ID="ddlStatus" runat="server" DataSource="<%# Statuses %>"
     DataValueField="Key" DataTextField="Value"></asp:DropDownList>

.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
    ddlStatus.DataBind();
    // or use Page.DataBind() to bind everything
}

public Dictionary<int, string> Statuses
{
    get 
    {
        // do database/webservice lookup here to populate Dictionary
    }
};

Il suffit d'utiliser " clé " et " valeur "

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top