2008-11-23 27 views
5

(Cuộn xuống dưới cùng của bài để tìm giải pháp.)DropdownList.selectedIndex luôn 0 (vâng, tôi có! IsPostBack)

Got một trang asp.net, trong đó có một DataList . Bên trong chuyên mục dữ liệu này, có là mẫu chứa danh sách thả xuống và mỗi lần trình dữ liệu được lấp đầy với một mục, một ItemCreatedCommand được gọi. itemCreatedCommand chịu trách nhiệm lập hóa đơn danh sách thả xuống.

Tôi nghĩ vấn đề nằm ở đây, rằng Tôi đang sử dụng ItemCreatedCommand để cư nó - nhưng những điều kỳ lạ là nếu tôi chọn màu "xanh", trang sẽ AutoPostBack, và tôi sẽ thấy mà thả xuống vẫn còn nằm trên xanh màu, nhưng khi cố gắng sử dụng nó SelectedIndex, tôi luôn nhận được 0 ...

protected void DataListProducts_ItemCreatedCommand(object 
    source, DataListItemEventArgs e) 

var itemId = (String)DataListProducts.DataKeys[e.Item.ItemIndex]; 
var item = itemBLL.GetFullItem(itemId); 

var DropDownListColor = (DropDownList)e.Item.FindControl("DropDownListColor"); 

//Also tried with : 
//if(!isPostBack) { 

DropDownListColor.DataSource = item.ColorList; 
DropDownList.Color.Databind(); 

// } End !isPostBack) 

    Label1.test = DropDownListColor.SelectedIndex.toString(); 
// <- THIS IS ALWAYS 0! *grr* 

tôi đã thu hẹp xuống mã một chút cho xem, nhưng bạn vẫn có thể xem những gì Tôi đang thử ing to do :) Lý do cho lý do tại sao tôi làm điều này và không khai báo nguồn dữ liệu cho các màu trực tiếp i aspx-page, là tôi cần chạy thử nghiệm nếu (showColors), nhưng tôi không muốn để làm lộn xộn trang html với mã mà tôi cảm thấy phải ở trong mã phía sau tệp.

EDIT: Sau khi cố gắng thay đổi SelectedIndexChange - Tôi đang gặp một "logic" sự nhầm lẫn trong đầu tôi bây giờ - làm sao tôi thay đổi các yếu tố bên trong datalist? Vì, theo như tôi biết - Tôi không có cách nào để kiểm tra xem mục nào trong số các mục trong danh sách dữ liệu này danh sách thả xuống cụ thể thuộc về ... Hoặc? Tôi sẽ thử một vài cách và xem những gì tôi kết thúc với;) Nhưng làm xin vui lòng gửi những suy nghĩ của bạn về câu hỏi này :)

SOLUTION:

Hoặc bong bóng các sự kiện để ItemCommand, hoặc xử lý sự kiện này, có người gửi mẹ (mà là một datalistItem và vận dụng các yếu tố trong đó.

protected void DropDownListColor_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      DropDownList dropDownListColor = (DropDownList)sender; 
      DataListItem dataListItem = (DataListItem)dropDownListColor.Parent; 

      var item = items[dataListItem.ItemIndex]; 
      var color = item.ItemColor[dropDownListColor.SelectedIndex]; 

      var LabelPrice = (Label)dataListItem.FindControl("LabelPrice"); 
      LabelPrice.Text = color.Price; 
     } 
+0

Bạn có thể làm rõ thêm về lý do không thêm đưa nó vào trang? Tôi không chắc tôi hiểu chính xác. Bạn nói rằng bạn không muốn lộn xộn ASPX/HTML, nhưng tôi thấy không có lý do tại sao ràng buộc DropDown một chút khác nhau sẽ làm như vậy? –

+0

Vâng, thành thật mà nói, tôi nghĩ rằng tôi sẽ từ bỏ các "không lộn xộn html" -file, kể từ khi tôi đã tìm kiếm xung quanh trong nhiều giờ, và nó có vẻ như không có thực hiện dễ dàng những gì tôi cần. Nhưng lý do là để giữ một đoạn mã nghiêm ngặt và thiết kế. (Bây giờ tôi phải thêm một if-check trong aspx) –

Trả lời

8

Khi DataList là dữ liệu bị ràng buộc, các AutoPostBack chưa được xử lý nào, tức là các giá trị trong ItemCreated sự kiện là stil l giá trị ban đầu.

Bạn cần xử lý sự kiện SelectedIndexChange của điều khiển thả xuống.

+0

Ah - cảm ơn;) Tôi sẽ thử rằng :) –

0

Về câu hỏi thứ 2 của bạn:

tôi khuyên bạn nên xóa AutoPostBack từ menu thả xuống, thêm một nút "Update", và cập nhật dữ liệu trong trường hợp Click vào nút.

Nút có thể giữ các giá trị Command và CommandArgument, vì vậy thật dễ dàng để liên kết với bản ghi cơ sở dữ liệu.

+0

Nhưng sau đó bạn sẽ phải tự nhấn nút để có được danh sách thả xuống dân cư - kể từ khi tôi thực sự có hai các trình đơn thả xuống phụ thuộc vào nhau, vì vậy trước tiên tôi cần điền một tệp, và dựa trên bước đầu tiên, tôi cần điền vào tệp thứ hai. –

0

cảm ơn cho giải pháp của bạn

protected void ddlOnSelectedIndexChanged(object sender, EventArgs e) { 
    try { 
     ModalPopupExtender1.Show(); 
     if (ViewState["Colors"] != null) { 
      FillColors(ViewState["Colors"].ToString()); 
     } 

     DropDownList dropDownListColor = (DropDownList)sender; 
     DataListItem dataListItem = (DataListItem)dropDownListColor.Parent; 

     Image image = (Image)dataListItem.FindControl("mdlImage"); 
     Label ProductCode = (Label)dataListItem.FindControl("lblprdCode"); 
     Label ProductName = (Label)dataListItem.FindControl("lblProdName"); 
     DropDownList ddlQuantity = (DropDownList)dataListItem.FindControl("ddlQuantity"); 
     Label ProductPrice = (Label)dataListItem.FindControl("lblProdPrice"); 
     Label TotalPrice = (Label)dataListItem.FindControl("lblTotPrice"); 
     //Label ProductPrice = (Label)dataListItem.FindControl("lblProdPrice"); 
    } catch (Exception ex) { 

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