2012-02-27 30 views
8

Veriler bir gridview web denetleyicisine bağlandığında, bir satıra eklenen onclick olayı olmaya çalışıyorum. Aşağıdaki kod herhangi bir özellik eklemiyor (sayfa oluşturulduktan sonra görüntüleme kaynağını kontrol ediyor) ve tabiki işlevsellik eklenmiyor. Şu anda, sayfaya sadece onclick baskı aldım, ancak sonunda başka bir sayfaya bağlanacak. Neyin yanlış olduğu hakkında bir fikrin var mı?ASP.NET gridview satırı onclick

Ayrıca, büyük oranda stackoverflow topluluğuyla. Bu topluluk her zaman çok yardımcı oldu. Bu haftasonu bazı yayınları kendim takip etmeyi planlıyorum ve biraz geri verebileceğim gibi soruları yanıtlamaya başla.

C# sunucu tarafı

protected void dataTbl_RowDataBound(GridViewRowEventArgs e){ 
      e.Row.Attributes.Add("id",e.Row.Cells[0].Text); 
      e.Row.Attributes.Add("onclick", "rowClick('"+e.Row.RowIndex+"')"); 

     } 

JavaScript istemci tarafı

function rowClicked(counter){ 
    document.write(counter); 
} 

cevap

9

Ben satırı seçmek için öznitelik eklemek için, benim GridView RowDataBound bu kullanıyorum:

protected void grvSearch_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    try 
    { 
     switch (e.Row.RowType) 
     { 
      case DataControlRowType.Header: 
       //... 
       break; 
      case DataControlRowType.DataRow: 
       e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#93A3B0'; this.style.color='White'; this.style.cursor='pointer'"); 
       if (e.Row.RowState == DataControlRowState.Alternate) 
       { 
        e.Row.Attributes.Add("onmouseout", String.Format("this.style.color='Black';this.style.backgroundColor='{0}';", grvSearch.AlternatingRowStyle.BackColor.ToKnownColor())); 
       } 
       else 
       { 
        e.Row.Attributes.Add("onmouseout", String.Format("this.style.color='Black';this.style.backgroundColor='{0}';", grvSearch.RowStyle.BackColor.ToKnownColor())); 
       } 
       e.Row.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(grvSearch, "Select$" + e.Row.RowIndex.ToString())); 
       break; 
     } 
    } 
    catch 
    { 
     //...throw 
    } 
} 

Ve bu, kullanıcı satırı tıklattığında olayı yakalamak için:

protected void grvSearch_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    try 
    { 
     //Do wherever you want with grvSearch.SelectedIndex     
    } 
    catch 
    { 
     //...throw 
    } 
} 
+0

Bir onclick olay sunucu tarafı kullanıyorsunuz gibi görünüyor. Onclick etkinliğimle javascript yöntemini bağlıyorum. İlk sorun olsa da, veri bağları üzerindeki özniteliklerini bile eklemiyor ve bununla aynı yöntemi kullandığımı düşünüyorum. Benim yöntemimle seninki arasında bir fark gördün mü? – steventnorris

+0

Evet, sunucu tarafı onclick. Bir javascript onclick'e ihtiyacınız varsa, etkinliğinizi doğrulamanızı öneririm (RowDataBound). GridView'unuz etkinlik içeriyor mu? Code'grv.RowDataBound + = dataTbl_RowDataBound 'code' gibi bir şey? Çünkü her iki yöntem de çok benzer. –

+0

... Kendimi çok aptal hissediyorum. Açık olanı işaret ettiğin için teşekkür ederim. Etkinlik bunu bilmezse bir yöntemi çağırmak zor. – steventnorris

3

jQuery bunun için, sadece böyle satır tıklama etkinliğini olsun: aldığımızda

$(document).ready(function() { 
    var clickCnt = 0; 
    $('table tr').click(function(){ 
     clickCnt++; 
     //Do something 
    }); 
}); 

, ben görüntülenen nesneye birincil anahtara TR kimliği ayarlamanızı öneririz Sıra.

3

GriddataTbl_RowDataBound numaralı telefonu arayacak şekilde kuruldu mu? Bu etkinlikte bir kesme noktasıyla hata ayıklıyorsanız, bu olay tetiklenir mi?

+0

Ve küçük hataların aptallığı yapılır. Etkinlik çağrımda bir sorun yaşadım. Teşekkürler. – steventnorris