2011-05-05 43 views

回答

16

試試這個:

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

另外,DropDownList ddl = new DropDownList();不需要,如果Web窗體已經宣佈:

<asp:DropDownList ID="ddl" runat="server" /> 
2

如果「選定」的部分是必要的,你也可以結合使用以下:

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

我會綁定到列表中後做這樣的事。

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

我相信這將工作:

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

我有同樣的問題,只是現在,但我想通了,寫代碼手動從我的列表中添加的項是短或長比其他解決方案描述

因此,這樣的事情應該爲你工作:

 //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以及檢查列表中是否已經有項目或沒有。

相關問題