我如何绑定一个列表<>对象的下拉列表,并根据对象的属性设置SelectedItem

本文关键字:对象 下拉列表 SelectedItem 设置 属性 绑定 何绑定 列表 一个 | 更新日期: 2023-09-27 17:54:54

我如何将对象的List<>绑定到下拉列表并根据对象中的属性设置SelectedItem ?

例如,假设我有一个List<Person>

Where Person有3个属性…

Person .Name (string)
       .Id  (int)
       .Selected (bool)

我希望第一个与Selected == true是列表中的SelectedItem

我如何绑定一个列表<>对象的下拉列表,并根据对象的属性设置SelectedItem

试试这个:

List<Person> list = new List<Person>();
// populate the list somehow
if ( !IsPostBack )
{
    DropDownList ddl = new DropDownList();
    ddl.DataTextField = "Name";
    ddl.DataValueField = "Id";
    ddl.DataSource = list;
    ddl.DataBind();
    ddl.SelectedValue = list.Find( o => o.Selected == true ).Id.ToString();
}

如果你不能保证总是至少有一个被选中的项目,那么你将需要通过检查list.Find()调用的返回值来单独处理,以确保它不是null

Also, DropDownList ddl = new DropDownList();如果webform已经声明:

则不需要:
<asp:DropDownList ID="ddl" runat="server" />

我相信这会成功的:

List<Person> people = GetDataFromSomewhere();
DropDownList ddl = new DropDownList();
ddl.DataTextField = "Name";
ddl.DataValueField = "Id";
ddl.DataSource = people;
ddl.DataBind();
ddl.SelectedValue = (from p in people
                     where p.Selected == true
                     select p.Id).FirstOrDefault().ToString();

如果'Selected'部分是命令式的,您还可以使用以下命令进行绑定:

        List<Person> ps = new List<Person>();
        DropDownList dl = new DropDownList();
        dl.Items
           .AddRange(ps
            .Select(p => new ListItem() {
               Text = p.Name
               , Value = p.ID
               , Selected = p.Selected }).ToArray());

我刚才也有同样的问题,但我发现编写代码手动添加列表中的项目比描述的其他解决方案更短或更长。

因此,像这样的东西应该为您工作:

        //bind persons
        foreach(Person p in personList)
        {
            ListItem item = new ListItem(p.Name, p.Id.ToString());
            item.Selected = p.Selected;
            DropDownListPerson.Items.Add(item);
        }

确保检查IsPostBack以及检查列表是否已经有项目

我将在绑定到列表后执行如下操作:

    private void SetSelected(int id)
    {
        foreach (ListItem li in list.Items)
        {
            li.Selected = false;
            if (li.Value == id.ToString())
            {
                li.Selected = true;
            }
        }
    }