Databind ASP.NET ListItem到DropDownList的问题

时间:2009-08-12 11:28:54

标签: asp.net data-binding list drop-down-menu listitem

我刚刚遇到过这种奇怪的事情,我期望以不同的(合乎逻辑的)方式工作,但事实并非如此。这是一个错误还是一个“功能”?

所以有一个DropDownList,我在Listbehind中使用ListItem列表填充。根据智能感知提供的文档,每个新的ListItem都有2个参数对应于它的文本和值:

List<ListItem> users = new List<ListItem>();
foreach (SubscriptionUser su in subscriptionDetails.UserList)
{
    users.Add(new ListItem(su.FirstName + " " + su.LastName, su.EmailAddress));
}
ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataBind();

现在,有人可以解释为什么数据绑定DropDownList将Text和Value设置为完全相同(ListItem文本)而不是使用ListItem.Text作为Text和ListItem.Value作为值吗?

ARGH!! http://www.freeimagehosting.net/uploads/fe65d0e7d5.jpg

或者我做错了什么?

5 个答案:

答案 0 :(得分:58)

您在数据绑定(对任何事物)时需要设置DropDownList的DataTextField和DataValueField。在您的情况下,您应该使用以下代码

List<ListItem> users = new List<ListItem>();
foreach (SubscriptionUser su in subscriptionDetails.UserList)
{
    users.Add(new ListItem(su.FirstName + " " + su.LastName, su.EmailAddress));
}
ddlPrimaryContact.DataTextField = "Text";
ddlPrimaryContact.DataValueField = "Value";
ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataBind();

答案 1 :(得分:9)

您应该将下拉列表绑定为:

ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataTextField = "Value";
ddlPrimaryContact.DataValueField = "Text";
ddlPrimaryContact.DataBind();

如果你问为什么,据我所知,数据绑定控件通过为数据源集合中的每个项调用 ToString 方法来获取文本和值(如果它们不像上面那样提供)。因此,集合中的每个ListItem都通过ToString方法返回它的Text属性。

答案 2 :(得分:5)

或者,你也可以用这种方式绑定它。 (假设您可以向SubscriptionUser添加一个名为FullName的readOnly属性(返回su.FirstName +“”+ su.LastName)

ddlPrimaryContact.DataSource = subscriptionDetails.UserList;
ddlPrimaryContact.DataBind();

然后,在你的ASPX页面中输入:

<asp:DropDownList id="ddlPrimaryContact" runat="server" DataTextField="FullName" DataValueField="EmailAddress" />

答案 3 :(得分:5)

您也可以直接将listitem添加到下拉列表中。

List<ListItem> users = new List<ListItem>();
        for (int count = 0; count < 10; count++)
        {
            ListItem li = new ListItem("List " + count.ToString(), count.ToString());
            ddl.Items.Add(li);
        }

答案 4 :(得分:5)

有一种方法可以将ListItem项添加到DropDownList,并使.NET自动将ListItem的Text与DropDownList的Text匹配,并且值与Value相同:

List<ListItem> users = new List<ListItem>();
// fill in list
ddlUsers.Items.AddRange(users.ToArray());