33

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

所以有一个 DropDownList,我在代码隐藏中填充了一个 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 作为 Value?

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

还是我做错了什么?

4

5 回答 5

66

嗨,当数据绑定(到任何东西)时,您需要设置 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();
于 2009-08-12T11:43:21.057 回答
11

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

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

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

于 2009-08-12T11:45:05.530 回答
7

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

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

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

<asp:DropDownList id="ddlPrimaryContact" runat="server" DataTextField="FullName" DataValueField="EmailAddress" />
于 2009-08-12T11:50:52.320 回答
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);
        }
于 2009-08-12T11:54:08.117 回答
5

有一种方法可以将 ListItem 项添加到 DropDownList 并让 .NET 自动将 ListItem 的文本与 DropDownList 的文本匹配,对于值也是如此:

List<ListItem> users = new List<ListItem>();
// fill in list
ddlUsers.Items.AddRange(users.ToArray());
于 2012-07-25T07:39:54.657 回答