C#DropDownList与作为数据源字典
我想使用languageCod
(en-gb)的Dictionary(列表)作为键和语言名(英文)作为要显示的文本来设置Dropdownlist
(languageList)的DataTextField
和DataValueField
。
相关编码:
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();
我怎样才能设置DataTextField
和DataValueField
?
就像那样,你可以使用“Key”和“Value”文本来设置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>
对象…因此您只需分别为DataTextField
和DataValueField
指定“Value”和“Key”,以selectValue / Key属性。
感谢Joe的评论,我重读了这个问题,让他们find正确的方法。 通常我会希望字典中的“键”是显示的文本,“值”是获取的值。 你的示例代码使用他们反过来。 除非你真的需要这样做,否则你可能要考虑编写你的代码:
list.Add(cul.DisplayName, cod);
(然后将绑定更改为DataTextField
“Key”和DataValueField
“Value”)。
事实上,我build议你看起来确实需要一个列表而不是一本字典,你可能首先要重新考虑使用字典。 你可以使用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();
只要使用“钥匙”和“价值”
如果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 } };