2012-02-27 11 views
8

Próbuję dodać zdarzenie onclick do wiersza, gdy dane są powiązane z gridową kontrolą podglądu. Poniższy kod nie dodaje żadnych atrybutów (sprawdził źródło wyświetleń po utworzeniu strony) i oczywiście nie dodano żadnej funkcji. Właśnie dostałem wydruk onclick na stronę, ale ostatecznie połączy się z inną stroną. Wszelkie pomysły na temat tego, co jest nie tak?Wyświetlenie widoku siatki grid.NET ASP.NET

Ponadto, dzięki społeczności stackoverflow na dużą skalę. Ta społeczność zawsze była wielką pomocą. Planuj, że sam przejdziesz przez niektóre posty w ten weekend i zacznij odpowiadać na pytania, jak tylko mogę, by trochę oddać.

C# server-side

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 po stronie klienta

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

Odpowiedz

9

używam tego w RowDataBound mojego GridView, aby dodać atrybut, aby zaznaczyć wiersz:

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

To po to, aby złapać zdarzenie, gdy użytkownik kliknie wiersz:

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

Wygląda na to, że używasz serwera zdarzeń onclick. Łączę metodę javascript z moim zdarzeniem onclick. Jednak pierwszy problem polega na tym, że nie dodaje on atrybutów do powiązania danych i uważam, że używam tej samej metody, co ty. Czy zauważyłeś jakąś różnicę między moją metodą a twoją? – steventnorris

+0

Tak, jest to serwer onclick. Jeśli potrzebujesz javascript onclick, sugeruję, aby zweryfikować swoje zdarzenie (RowDataBound). Twój GridView zawiera wydarzenie? Coś w stylu 'code'grv.RowDataBound + = dataTbl_RowDataBound' code'? Ponieważ obie metody są bardzo podobne. –

+0

... Czuję się bardzo głupio. Dziękuję za wskazanie tego, co oczywiste. Trudno wywołać metodę, jeśli zdarzenie nawet tego nie wie. – steventnorris

3

Aby to zrobić w jQuery, po prostu dostać zdarzenie rząd kliknij takiego:

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

z tym, zalecane jest ustawienie TR ID do klucza podstawowego do przedmiotu, który jest wyświetlany w rząd.

3

Czy Grid skonfigurowano tak, aby wywoływać zdarzenie dataTbl_RowDataBound? Jeśli debugujesz z punktem przerwania w tym wydarzeniu, czy to wydarzenie zostanie wyrzucone?

+0

I popełnia się głupotę drobnych błędów. Podczas rozmowy o wydarzeniu wystąpił problem. dzięki. – steventnorris

Powiązane problemy