C # DropDownList with a Dictionary as DataSource

我想使用 languageCod(en-gb)的 Dictionary (list)作为键,并使用语言名(English)作为要显示的文本来设置 Dropdownlist(language-List)的 DataTextFieldDataValueField

相关守则:

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

如何设置 DataTextFieldDataValueField

124550 次浏览

枚举字典时,它将生成 KeyValuePair<TKey,TValue>对象... ... 所以您只需分别为 DataTextFieldDataValueField指定“ Value”和“ Key”,就可以选择 价值/Key属性。

多亏了乔的评论,我重新读了一遍这个问题,把它们理顺了。通常,我希望字典中的“键”是显示的文本,而“值”是获取的值。不过,示例代码使用它们的方式正好相反。除非您真的需要这样,否则您可能需要考虑以下方式编写代码:

list.Add(cul.DisplayName, cod);

(然后将绑定更改为对 DataTextField使用“ Key”,当然对 DataValueField使用“ Value”。)

事实上,我建议,因为看起来你确实需要一个 名单而不是一个字典,你可能要重新考虑使用字典放在首位。你可以使用 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));
}

或者,使用一个简单的 CultureInfo值列表:

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

如果不使用 LINQ,仍然可以使用普通 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();

比如你可以使用“键”和“值”文本设置 DropDownList 的 DataTextField 和 DataValueField:

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

只要用“键”和“值”

如果 DropDownList 是在 aspx 页面中声明的,而不是在代码隐藏中,您可以这样做。

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