Frage

Ich mag DataTextField und DataValueField einer Dropdownlist (Sprachenliste) mit einem Wörterbuch (Liste) von languageCod (de-de) als Schlüssel und Sprache Namen (Englisch) als der Text setzen angezeigt werden soll.

Relevante Code:

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

Wie kann ich DataTextField und DataValueField?

War es hilfreich?

Lösung

Wie, dass Sie und Datatextdatavaluefield von Dropdownlist mit „Key“ und „Value“ Texte festlegen:

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

Andere Tipps

Wenn ein Wörterbuch aufgezählt wird, wird es KeyValuePair<TKey,TValue> Objekte ergeben. .. so müssen Sie nur „Value“ und „Key“ für DataTextField und DataValueField angeben bzw. die Wert / Key Eigenschaften.

Dank Joe Kommentar, nachzulesen ich die Frage diese richtig herum zu bekommen. Normalerweise würde ich den „Schlüssel“ im Wörterbuch erwarten, dass der Text sein, die angezeigt wird, und der „Wert“ der Wert abgerufen werden. Ihr Beispielcode verwendet sie umgekehrt aber. Es sei denn, Sie wirklich brauchen, so zu sein, möchten Sie vielleicht Ihren Code betrachten das Schreiben als:

list.Add(cul.DisplayName, cod);

(Und dann ändert sich die Bindung zu verwenden "Key" für DataTextField und "Value" für DataValueField, natürlich.)

In der Tat, ich würde vorschlagen, dass, wie es scheint Sie wirklich eine Liste willst anstatt ein Wörterbuch, könnte man mit einem Wörterbuch in erster Linie zu überdenken. Sie könnten nur einen List<KeyValuePair<string, string>> verwenden:

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

Alternativ können Sie eine Liste von einfachen CultureInfo Werte verwenden. LINQ macht dies einfach:

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

Wenn Sie nicht LINQ verwenden, können Sie immer noch eine normale foreach-Schleife verwenden:

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

Wenn die Dropdownlist in Ihrer aspx Seite erklärt wird und nicht in dem Code-Behind, können Sie es wie folgt tun.

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

Verwenden Sie einfach "Key" und "Wert"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top