如何使用List <listitem> </listitem>填充DropDownList

时间:2011-02-01 16:04:24

标签: c# asp.net

我有一个DropDownList。

我需要使用List<ListItem>中收集的项目填充它。

在我的脚本中,收集器已正确填充。

但我无法填充DropDownList。我收到一个错误:

DataBinding: 'System.Web.UI.WebControls.ListItem' does not contain a property with the name 'UserName'."}

<asp:DropDownList ID="uxListUsers" runat="server" DataTextField="UserName" 
DataValueField="UserId">

List<ListItem> myListUsersInRoles = new List<ListItem>();
foreach (aspnet_Users myUser in context.aspnet_Users)
{
    // Use of navigation Property EntitySet
    if (myUser.aspnet_Roles.Any(r => r.RoleName == "CMS-AUTHOR" || r.RoleName == "CMS-EDITOR"))
        myListUsersInRoles.Add(new ListItem(myUser.UserName.ToString(), myUser.UserId.ToString()));
}
uxListUsers.DataSource = myListUsersInRoles; // MAYBE PROBLEM HERE????
uxListUsers.DataBind();

有什么想法吗?感谢

8 个答案:

答案 0 :(得分:4)

初始化listItem对象时,实际上是初始化属性(文本,值)

EX ( new ListItem(myUser.User (Text PROPERTY), myUser.UserId.ToString() (Value PROPERTY) )

尝试将其与

绑定
    <asp:DropDownList ID="uxListUsers" runat="server" DataTextField="Text" 
DataValueField="Value">    

下拉列表将采用存储在ListItem对象

中的文本和值属性

并在用户界面中显示

答案 1 :(得分:3)

看起来您正在绑定ListItem对象列表,这些对象不公开UserName或UserId属性。只需清除这些属性(DataTextField和DataValueField),你就应该好好去。

或者更好的是,只需将您创建的列表项直接添加到下拉菜单中,然后跳过绑定。

答案 2 :(得分:3)

如错误所示,System.Web.UI.WebControls.ListItem没有UserName成员。它确实有Text和Value成员。请尝试以下

<asp:DropDownList ID="uxListUsers" runat="server" DataTextField="Text" DataValueField="Value">

答案 3 :(得分:2)

如此简单,只需使用ListItemCollection代替通用列表列表 这是

更改第一行

<asp:DropDownList ID="uxListUsers" runat="server">

ListItemCollection myListUsersInRoles = new ListItemCollection();
        foreach (aspnet_Users myUser in context.aspnet_Users)
        {
            // Use of navigation Property EntitySet
            if (myUser.aspnet_Roles.Any(r => r.RoleName == "CMS-AUTHOR" || r.RoleName == "CMS-EDITOR"))
                myListUsersInRoles.Add(new ListItem(myUser.UserName.ToString(), myUser.UserId.ToString()));
        }
        uxListUsers.DataSource = myListUsersInRoles; // MAYBE PROBLEM HERE????
        uxListUsers.DataBind();

答案 4 :(得分:1)

不要将ListItems绑定到列表,只需添加它们即可。绑定是一种使用ListControl的内置函数将对象转换为ListItems的方法。由于您已完成转换,因此请保存自己和服务器,并使用ClearItems.AddRange代替DataSourceDataBind

uxListUsers.Clear();
uxListUsers.Items.AddRange(myListUsersInRoles;)

您还需要从aspx中删除绑定指令:

<asp:DropDownList ID="uxListUsers" runat="server" />

答案 5 :(得分:0)

通用列表中没有Username和UserId。您最好的选择是,如果命名很重要,则创建一个对象,其中包含您需要绑定的两个字段,而不是绑定到ListItem。如果必须绑定到ListItem,请将Value和Text视为绑定点。

答案 6 :(得分:0)

可能是使用反射的最简单方法

uxListUsers.DataSource = typeof(ListItem).GetProperties();
uxListUsers.DataTextField = "Name"; //This is name of property enumerable typeof(ListItem).GetProperties().AsEnumerable().Select(p => new { p.Name }) 
uxListUsers.DataBind();

答案 7 :(得分:0)

ListItem LI = new ListItem();
LI.Value = Convert.ToString("value");
LI.Text = Convert.ToString("text");
DrpDwnlist.Items.Add(LI);