Databind ASP.NET ListItem到DropDownList的问题

Far*_*nha 30 asp.net data-binding list listitem drop-down-menu

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

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

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();
Run Code Online (Sandbox Code Playgroud)

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

哎呀!http://www.freeimagehosting.net/uploads/fe65d0e7d5.jpg

或者我做错了什么?

Mat*_*ser 59

嗨,当数据绑定(到任何东西)时,您需要设置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();
Run Code Online (Sandbox Code Playgroud)


Can*_*var 10

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

ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataTextField = "Value";
ddlPrimaryContact.DataValueField = "Text";
ddlPrimaryContact.DataBind();
Run Code Online (Sandbox Code Playgroud)

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


dav*_*ere 7

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

ddlPrimaryContact.DataSource = subscriptionDetails.UserList;
ddlPrimaryContact.DataBind();
Run Code Online (Sandbox Code Playgroud)

然后,在你的ASPX页面中放置:

<asp:DropDownList id="ddlPrimaryContact" runat="server" DataTextField="FullName" DataValueField="EmailAddress" />
Run Code Online (Sandbox Code Playgroud)


Muh*_*tar 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);
        }
Run Code Online (Sandbox Code Playgroud)


Far*_*nha 5

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

List<ListItem> users = new List<ListItem>();
// fill in list
ddlUsers.Items.AddRange(users.ToArray());
Run Code Online (Sandbox Code Playgroud)