C#DropDownList,字典为DataSource
-
03-07-2019 - |
题
我想使用DataTextField
(en-gb)的词典(列表)作为键和语言名称(英语)作为要显示的文本,设置DataValueField
和Dropdownlist
languageCod
(languageList)
相关守则:
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();
如何设置<=>和<=>?
解决方案
就像你可以使用<!>“Key <!>”设置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();
其他提示
枚举词典时,会产生 KeyValuePair<TKey,TValue>
对象...所以你只需要指定<!> quot; Value <!> quot;和<!> quot; Key <!> quot;分别用于DataTextField
和DataValueField
,以选择价值 / 关键属性。
感谢Joe的评论,我重读了这个问题,以便正确地解决这些问题。通常我会期望<!> quot; key <!> quot;在字典中作为显示的文本,<!>“;值<!>”;成为获取的值。您的示例代码以相反的方式使用它们。除非你真的需要它们,否则你可能需要考虑将代码编写为:
list.Add(cul.DisplayName, cod);
(然后更改绑定以使用<!>“Key <!>”用于List<KeyValuePair<string, string>>
和<!>“;值<!>”用于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));
}
或者,使用普通<=>值列表。 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();
如果在您的aspx页面中声明DropDownList而不是在代码隐藏中声明,则可以这样做。
的.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
}
};
只需使用<!>“; Key <!>”;和<!>“;值<!>”;