2012-05-24 7 views
6

Używam gridview i sqldatasource.Jak uzyskać indeks wiersza w wybranej liście rozwijanejIndeksChanged?

Mam dropdownlist w moim gridview z 2 wartościami: Tak i Nie.

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.. 
} 

muszę uzyskać indeks wiersza ponieważ GridViewRow row = GridView1.Rows[e.RowIndex]; nie jest dostępna w aktualnym wydarzeniu.

+1

tylko problem UI, jeśli masz tylko dwie wartości należy użyć RadioButtonList. DropDownList wymagałoby dwóch kliknięć, gdzie RadioButtonList wymaga tylko jednego. –

Odpowiedz

19

Jak @mellamokb już wspomniano, zawsze masz kontrolę który zgłosił zdarzenie przez nadawcę argument, musisz tylko rzucić to odpowiednio.

DropDownList ddl = (DropDownList)sender; 

Jeśli trzeba także uzyskać referencję do GridViewRow z DropDownList (lub jakiejkolwiek innej kontroli w TemplateField z GridView), można użyć właściwości NamingContainer.

GridViewRow row = (GridViewRow)ddl.NamingContainer; 

ale muszę dostać indeks wiersza dla uzyskania korzyści z TemplateField który nie jest rozwijana jest pole tekstowe

można dostać żadnej kontroli raz masz odniesienie GridViewRow przy użyciu row.FindControl("ID") (TemplateField) lub row.Cells[index].Controls[0] (BoundField).

Na przykład (zakładając, że istnieje TextBox w innej kolumnie):

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

Dziękuję, ok, ale muszę uzyskać indeks wiersza, aby uzyskać wartość z szablonu, który nie jest rozwijany, to pole tekstowe. – Jax

+0

@jax: edytowałem moją odpowiedź. –

4

Jeśli wszystko czego szukasz jest wartość dropdownlist, że podjęła się jako sender:

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

udało się, ale czy wiesz, w jaki sposób mogę uzyskać wiersz? ponieważ muszę uzyskać w tym samym zdarzeniu wartość pole templatefield: na przykład jest to w przypadku aktualizacji wiersza: String DS = ((TextBox) row.Cells [6] .FindControl ("TXT")). Tekst; – Jax

+0

Myślę, że można zrobić 'ddl.Parent', lub może to być' ddl.Parent.Parent'. Będziesz musiał poeksperymentować, ile poziomów w hierarchii musisz przejść, aby znaleźć GridViewRow. – mellamokb

+0

Nie zamierzam uzyskać wiersza rozwijanego, po prostu potrzebuję indeks edycji wiersza do uzyskania wartości z pola szablonu. – 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

Dziękujemy za zamieszczenie odpowiedzi! Podczas gdy fragment kodu mógłby odpowiedzieć na pytanie, nadal dobrze jest dodać dodatkowe informacje, np. Wyjaśnić itp. – j0k

Powiązane problemy