2012-05-24 20 views
6

Izgara görünümü ve sqldatasource kullanıyorum.Dropdownlist selectedIndexChanged içinde satır dizini nasıl alınır?

Izgara görünümümde 2 değerle bir açılır kapanma listesi var: Evet ve Hayır. Bu GridViewRow row = GridView1.Rows[e.RowIndex]; akım halinde kullanılamadığı için

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

Ben Satır indeksini almak gerekir. Aradığınız tüm dropdownlist değeri ise, o kadar içinde geçirilen

+1

Sadece bir UI sorunu, yalnızca bir RadioButtonList kullanmalısınız iki değer varsa. Bir DropDownList, RadioButtonList öğesinin yalnızca bir tane gerektirdiği iki tıklama gerektirir. –

cevap

19

, her zaman gönderen tarafından bir etkinlik kaldırdı kontrol olsun argüman, sadece buna göre yapmak zorundasınız. Ayrıca DropDownList ait GridViewRow (veya bir GridView bir TemplateField başka kontrol) bir başvuru almak gerekiyorsa

DropDownList ddl = (DropDownList)sender; 

, sen NamingContainer özelliğini kullanabilirsiniz.

GridViewRow row = (GridViewRow)ddl.NamingContainer; 

ama bir açılan olmayan bir TemplateField bir değer elde etmek için satır endeksini almak gerekir Eğer kullanarak GridViewRow referansına sahip kez herhangi bir kontrol elde edebilirsiniz

bir metin kutusu ise row.FindControl("ID") (TemplateField) veya row.Cells[index].Controls[0] (BoundField). Örneğin

(a TextBox başka sütunda var varsayarak):

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

Teşekkür ederim, tamam ama bir açılır menü olmayan bir şablon alanından değer almak için satır dizini almam gerekiyor. – Jax

+0

@jax: cevabımı düzenledim. –

4

sender:

@mellamokb da bahsettiği gibi
DropDownList ddl = sender as DropDownList; 
if (ddl.SelectedValue == "1") 
    // do something... 
+0

işe yaradı, ama sırayı nasıl alabilirim biliyor musun? çünkü aynı olaya bir şablon alanının değerini girmem gerekiyor: örneğin bu satır güncelleme olayında: String DS = ((TextBox) row.Cells [6] .FindControl ("TXT")). – Jax

+0

Sanırım "ddl.Parent" yapabilirsin, ya da "ddl.Parent.Parent" olabilir. GridViewRow'u bulmak için hiyerarşide kaç seviyeye çıkmanız gerektiğini denemeniz gerekir. – mellamokb

+0

Açılan satırı almayı düşünmüyorum, şablon alanından bir değer elde etmek için satır düzenleme dizinine ihtiyacım var. – 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

Cevabınız için teşekkür ederiz! Bir kod pasajı soruyu yanıtlayabilirken, açıklamak gibi bazı ek bilgiler eklemek hala harikadır. – j0k

İlgili konular