C#DropDownList与作为数据源字典

我想使用languageCod (en-gb)的Dictionary(列表)作为键和语言名(英文)作为要显示的文本来设置Dropdownlist (languageList)的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

就像那样,你可以使用“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>对象…因此您只需分别为DataTextFieldDataValueField指定“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 } };