以字典作为数据源的C#DropDownList
我想使用以字典作为数据源的C#DropDownList,c#,dictionary,drop-down-menu,C#,Dictionary,Drop Down Menu,我想使用languageCod(en gb)的字典(列表)作为键,使用语言名称(英语)作为要显示的文本,设置Dropdownlist(语言列表)的DataTextField和DataValueField 相关代码: string[] languageCodsList= service.LanguagesAvailable(); Dictionary<string, string> list = new Dictionary<string,
languageCod
(en gb)的字典(列表)作为键,使用语言名称(英语)作为要显示的文本,设置Dropdownlist
(语言列表)的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();
string[]languageCodsList=service.languageSavaailable();
字典列表=
新词典(languageCodsList.Length);
foreach(语言codslist中的字符串cod)
{
CultureInfo cul=新的CultureInfo(cod);
列表。添加(cod、cul.DisplayName);
}
languageList.DataSource=list;
languageList.DataBind();
如何设置
DataTextField
和DataValueField
?当枚举字典时,它将生成对象。。。因此,您只需分别为DataTextField
和DataValueField
指定“Value”和“Key”,即可选择/properties
多亏了乔的评论,我重新阅读了这个问题,以便正确地理解这些问题。通常我希望字典中的“键”是显示的文本,“值”是获取的值。但是,您的示例代码反过来使用它们。除非你真的需要这样做,否则你可能会想把你的代码写为:
list.Add(cul.DisplayName, cod);
(然后将绑定更改为对DataTextField
使用“Key”,当然对DataValueField
使用“Value”)
事实上,我建议,因为你似乎真的想要一个列表而不是一本字典,你可能首先要重新考虑使用字典。您可以使用列表
:
如果不使用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();
List cultures=new List();
foreach(service.LanguagesAvailable()中的字符串cod)
{
添加(新文化信息(cod));
}
languageList.DataTextField=“DisplayName”;
languageList.DataValueField=“Name”;
languageList.DataSource=文化;
languageList.DataBind();
您可以使用“键”和“值”文本设置DropDownList的DataTextField和DataValueField:
字典列表=新字典();
列表。添加(“第1项”、“第1项”);
列表。添加(“第2项”、“第2项”);
列表。添加(“第3项”、“第3项”);
列表。添加(“第4项”、“第4项”);
ddl.DataSource=list;
ddl.DataTextField=“值”;
ddl.DataValueField=“Key”;
ddl.DataBind();
只要使用“键”和“值”如果DropDownList是在您的aspx页面中声明的,而不是在codebehind中声明的,您可以这样做
.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
}
};
受保护的无效页面加载(对象发送方,事件参数e)
{
ddlStatus.DataBind();
//或者使用Page.DataBind()绑定所有内容
}
公共词典状态
{
得到
{
//在此处执行数据库/Web服务查找以填充字典
}
};
事实上,这是不正确的-请看我对公认答案的评论。啊,我误解了这个问题。在我看来,把它们按“错误”的方式放在字典里似乎令人困惑。将编辑我的答案。@jonsket“向后”关联的原因是,作为键/值对存储在字典中的数据通常使用键(查找值)作为数据关联(例如,用于数据库引用),在下拉列表中,这对应于DataValueField,即POST的返回值,它告诉您有关所选项目的更多信息,而不是DataTextField,即显示值。(DropDownLists只是有一个糟糕的命名约定)我建议将TextField设置为“key”,将ValueField设置为Value。我认为这更直观。@MGOwen将DataValueField设置为Value似乎很直观,因为它有一个常见的“Value”,但在经常使用datastructure/control时,这实际上是不合逻辑的。有关这方面的详细信息,请参阅我对Jon Skeet答案的评论。我没有看到列表。添加需要2个参数。。只有一个需要一个arg。这是winforms吗???@hrh那么您可能没有使用字典
,但可能使用列表
@Canavar是否可以将数据文本字段设置为“键值”。。。。?我怎么能做到呢,投了赞成票。值得注意的是,这是一个需要评估的服务器端对象。您不能使用内联传递它。无论这是一个,还是如马特的例子所示,都取决于你。它确实有效。
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();
<asp:DropDownList ID="ddlStatus" runat="server" DataSource="<%# Statuses %>"
DataValueField="Key" DataTextField="Value"></asp:DropDownList>
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
}
};