我如何将对象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以及检查列表是否已有项目。