枚举字典时会产生KeyValuePair<TKey,TValue>对象...所以你只需要分别为DataTextField和DataValueField指定“Value”和“Key”即可选择Value/@ 987654323@属性。
感谢乔的评论,我重新阅读了这个问题以正确解决这些问题。通常我希望字典中的“键”是显示的文本,而“值”是获取的值。您的示例代码以相反的方式使用它们。除非您真的需要它们,否则您可能需要考虑将代码编写为:
list.Add(cul.DisplayName, cod);
(当然,然后将绑定更改为使用DataTextField 的“Key”和DataValueField 的“Value”。)
事实上,我建议您似乎确实想要一个 list 而不是字典,因此您可能首先要重新考虑使用字典。你可以使用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 值列表。 LINQ 让这一切变得非常简单:
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();