2012-05-24 68 views
6

Tôi đang sử dụng chế độ xem lưới và sqldatasource.Làm cách nào để lấy chỉ mục hàng trong danh sách thả xuống đã chọnIndexChanged?

Tôi có danh sách thả xuống trong chế độ xem lưới với 2 giá trị: Có và Không.

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    GridViewRow row = GridView1.Rows[e.RowIndex]; 
    DropDownList ddl = ((DropDownList)row.FindControl("DropdownList1")); 
    if(ddl.selectedvalue == "1") 
     //etc.. 
} 

Tôi cần lấy chỉ mục Hàng vì GridViewRow row = GridView1.Rows[e.RowIndex]; này không khả dụng trong sự kiện hiện tại.

+1

Chỉ cần một vấn đề UI, nếu bạn chỉ có hai giá trị mà bạn nên sử dụng một RadioButtonList. Một DropDownList sẽ yêu cầu hai lần nhấp chuột, trong đó RadioButtonList chỉ yêu cầu một. –

Trả lời

19

Như @mellamokb đã đề cập, bạn luôn luôn nhận được điều khiển nâng lên một sự kiện bởi người gửi đối số, bạn chỉ phải truyền nó cho phù hợp.

DropDownList ddl = (DropDownList)sender; 

Nếu bạn cũng cần phải nhận được một tham chiếu đến GridViewRow của DropDownList (hoặc bất kỳ kiểm soát khác trong một TemplateField của một GridView), bạn có thể sử dụng NamingContainer tài sản.

GridViewRow row = (GridViewRow)ddl.NamingContainer; 

nhưng tôi cần để có được chỉ số hàng để có được một giá trị từ một TemplateField người không phải là một danh sách thả xuống là một textbox

Bạn có thể nhận được bất kỳ sự kiểm soát một khi bạn có GridViewRow tài liệu tham khảo bằng cách sử dụng row.FindControl("ID") (TemplateField) hoặc row.Cells[index].Controls[0] (BoundField).

Ví dụ (giả sử có một TextBox trong cột khác):

TextBox txtName = (TextBox)row.FindControl("TxtName"); 
+0

Cảm ơn bạn, ok nhưng tôi cần để có được chỉ số hàng để có được một giá trị từ một templatefield không phải là một dropdown là một hộp văn bản. – Jax

+0

@jax: đã chỉnh sửa câu trả lời của tôi. –

4

Nếu tất cả các bạn đang tìm kiếm là giá trị của DropDownList, đó là thông qua tại làm sender:

DropDownList ddl = sender as DropDownList; 
if (ddl.SelectedValue == "1") 
    // do something... 
+0

đã hoàn thành công việc, nhưng bạn có biết làm cách nào để có được hàng không? bởi vì tôi cần phải nhận được trong cùng một sự kiện giá trị của một templatefield: ví dụ này là trong hàng cập nhật sự kiện: String DS = ((TextBox) row.Cells [6] .FindControl ("TXT")). – Jax

+0

Tôi nghĩ bạn có thể làm 'ddl.Parent' hoặc có thể là' ddl.Parent.Parent'. Bạn sẽ phải thử nghiệm có bao nhiêu cấp trong hệ thống phân cấp mà bạn phải đi ra ngoài để tìm GridViewRow. – mellamokb

+0

Tôi không có ý định nhận hàng thả xuống, tôi chỉ cần chỉ mục chỉnh sửa hàng để nhận giá trị từ trường mẫu. – Jax

1
Protected Sub ddlneedlocationcmf_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim gvrow As GridViewRow = CType(sender, DropDownList).NamingContainer 
    Dim rowindex As Integer = CType(gvrow, GridViewRow).RowIndex 


End Sub 
+2

Cảm ơn bạn đã đăng câu trả lời! Mặc dù đoạn mã có thể trả lời câu hỏi vẫn tuyệt vời để thêm một số thông tin bổ sung xung quanh, như giải thích, v.v. – j0k

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