2011-05-05 7 views

Odpowiedz

16

Spróbuj tego:

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

Jeśli nie można zagwarantować, że zawsze znajdzie się przynajmniej jeden wybrany element, a następnie będziemy chcieli obsłużyć, że osobno poprzez sprawdzenie wartości zwracanej z list.Find() wywołaniu upewnij się, że nie jest to null.

Również DropDownList ddl = new DropDownList(); nie potrzebne jeśli Webform już oświadczył:

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

Jeśli „Selected” część jest konieczne można również wiązać przy użyciu następujących:

 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

chciałbym zrobić coś takiego po związaniu z listy .

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

Wierzę, że to będzie działać:

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

Miałem to samo pytanie tylko teraz, ale zorientowałem się, że pisanie kodu ręcznie dodać elementy z mojej listy był krótszy lub tak długo, jak nie inne opisane rozwiązania.

Zatem coś jak to powinno działać dla Ciebie:

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

Wystarczy upewnić się, aby sprawdzić IsPostBack a także sprawdzenie, czy lista ma już przedmiotów, czy nie.

Powiązane problemy