2011-05-05 17 views
10

Làm cách nào để DataBind có được một đối tượng vào một DropDownList và đặt SelectedItem dựa trên một thuộc tính trong đối tượng?Làm thế nào tôi có thể DataBind một List <> của các đối tượng vào một DropDownList và thiết lập SelectedItem dựa trên một thuộc tính trong đối tượng?

Ví dụ, nói rằng tôi có một List<Person>

đâu Người có 3 thuộc tính ...

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

Tôi muốn là người đầu tiên với Selected == true là SelectedItem trong danh sách.

Trả lời

16

Hãy thử điều này:

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

Nếu bạn không thể đảm bảo rằng sẽ luôn có ít nhất một mục đã chọn, sau đó bạn sẽ muốn để xử lý mà riêng bằng cách kiểm tra giá trị trả về từ list.Find() cuộc gọi đến đảm bảo rằng nó không phải là null.

Ngoài ra, DropDownList ddl = new DropDownList(); không cần thiết nếu Webform đã tuyên bố:

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

Nếu phần 'chọn' là bắt buộc bạn cũng có thể liên kết bằng cách sử dụng sau đây:

 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

tôi sẽ làm một cái gì đó như thế này sau khi ràng buộc vào danh sách .

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

Tôi tin rằng điều này sẽ làm việc:

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

Tôi có cùng một câu hỏi chỉ là bây giờ nhưng tôi đã tìm ra rằng viết code để tự thêm các mục từ Danh sách của tôi là ngắn hơn hoặc càng lâu càng hơn các giải pháp khác được mô tả.

Như vậy một cái gì đó như thế này nên làm việc cho bạn:

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

Chỉ cần chắc chắn để kiểm tra IsPostBack cũng như kiểm tra xem danh sách đã có mặt hay không.

Các vấn đề liên quan