2011-07-19 52 views
5

Tôi có một dropDownList asp.net được tự động liên kết với một sqlDataSource với các giá trị của kiểu khách hàng khi tải trang. Khi tải trang Tôi cũng tạo một đối tượng Client, một trong các thuộc tính của nó là ClientType. Tôi đang cố gắng thiết lập SelectedValue của ddl theo giá trị của thuộc tính ClientType của đối tượng Client không thành công. Tôi nhận được thông báo lỗi sau "System.ArgumentOutOfRangeException: 'ddlClientType' có một SelectedValue đó là không hợp lệ vì nó không tồn tại trong danh sách các mục". Tôi hiểu rằng điều này là do danh sách chưa được phổ biến khi tôi cố đặt giá trị đã chọn. Có cách nào khắc phục vấn đề này không? Cảm ơn bạn!Cài đặt SelectedValue của dữ liệu bị ràng buộc DropDownList

+2

Bạn có thể đăng một số mã không? –

Trả lời

5

Bạn phải sử dụng các sự kiện DataBound, nó sẽ bị đuổi việc, một khi databinding hoàn tất

protected void DropDownList1_DataBound(object sender, EventArgs e) 
{ 
    // You need to set the Selected value here... 
} 

Nếu bạn thực sự muốn nhìn thấy giá trị trong trường hợp trang tải, sau đó gọi phương thức DataBind() trước khi thiết lập giá trị ...

protected void Page_Load(object sender, EventArgs e) 
{ 
    DropdownList1.DataBind(); 
    DropdownList1.SelectedValue = "Value"; 
} 
+0

Tôi đã thử và vẫn nhận được thông báo lỗi tương tự. –

+0

Kiểm tra phần chỉnh sửa của tôi. –

+0

Tôi đã thử lại bằng cách sử dụng sự kiện dataBound và tôi không còn nhận được thông báo lỗi nhưng giá trị không được chọn. –

4

Trước khi cài đặt một tấm séc giá trị được lựa chọn cho dù mục có trong danh sách và hơn chọn nó bằng chỉ số

<asp:DropDownList id="dropDownList" 
        AutoPostBack="True" 
        OnDataBound="OnListDataBound" 
        runat="server /> 
protected void OnListDataBound(object sender, EventArgs e) 
{ 
    int itemIndex = dropDownList.Items.IndexOf(itemToSelect); 
    if (itemIndex >= 0) 
    { 
     dropDownList.SelectedItemIndex = itemIndex; 
    } 
} 

EDIT: Thêm ...

Nếu bạn đang làm công cụ ràng buộc trong tải trang, hãy thử làm theo cách này:

  • Move tất cả các ràng buộc mã liên quan trong overriden DataBind() phương pháp
  • Trong Page_Load của Trang thêm: (trong trường hợp điều khiển không gọi trực tiếp DataBind, đây là trách nhiệm của trang gốc)
if (!IsPostBack) 
{ 
    Page.DataBind(); // only for pages 
} 
Các vấn đề liên quan