我如何将对象List 绑定到DropDownList并根据对象中的属性设置SelectedItem?

我如何将对象List绑定到DropDownList并根据对象中的属性设置SelectedItem?

例如,假设我有一个List

人有3个属性……

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

我希望第一个使用Selected == true的列表中的SelectedItem。

试试这个:

 List list = new List(); // 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

另外,DropDownList ddl = new DropDownList(); 如果webform已经声明,则不需要:

  

我相信这会奏效:

 List 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(); 

如果“选定”部分是必需的,您还可以使用以下内容进行绑定:

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

绑定到列表后我会做这样的事情。

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

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

因此这样的事情对你有用:

  //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以及检查列表是否已有项目。