Domanda

Voglio impostare DataTextField e DataValueField di un Dropdownlist (Elenco lingue) usando un Dizionario (elenco) di languageCod (en-gb) come nome chiave e lingua (inglese) come testo da visualizzare .

Codice rilevante:

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

Come posso impostare <=> e <=>?

È stato utile?

Soluzione

In questo modo puoi impostare DataTextField e DataValueField di DropDownList usando " Key " e " Valore " testi:

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

Altri suggerimenti

Quando un dizionario viene elencato, verrà visualizzato KeyValuePair<TKey,TValue> oggetti ... quindi devi solo specificare " Valore " e " Chiave " per DataTextField e DataValueField, rispettivamente, per selezionare Value / Proprietà chiave

.

Grazie al commento di Joe, rileggo la domanda per farli girare nel modo giusto. Normalmente mi aspetto il & Quot; chiave & Quot; nel dizionario come testo visualizzato e " valore " essere il valore recuperato. Il tuo codice di esempio li usa viceversa. A meno che tu non abbia davvero bisogno che siano così, potresti considerare di scrivere il tuo codice come:

list.Add(cul.DisplayName, cod);

(E quindi cambiando l'associazione per usare " Chiave " per List<KeyValuePair<string, string>> e " Valore " per CultureInfo, ovviamente.)

In effetti, suggerirei che siccome sembra che tu voglia davvero un elenco piuttosto che un dizionario, potresti voler riconsiderare usando un dizionario in primo luogo. Puoi semplicemente usare un <=>:

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

In alternativa, utilizzare un elenco di valori <=> semplici. LINQ rende tutto molto semplice:

var cultures = service.LanguagesAvailable()
                      .Select(language => new CultureInfo(language));
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();

Se non si utilizza LINQ, è comunque possibile utilizzare un normale ciclo 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();

Se il DropDownList è dichiarato nella tua pagina aspx e non nel codebehind, puoi farlo in questo modo.

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
    }
};

Basta usare " Tasto " e " Valore "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top