2012-02-27 41 views
8

Estoy intentando tener un evento onclick agregado a una fila una vez que los datos están vinculados a un control web gridview. El código siguiente no agrega ningún atributo (marca el sitio de vista una vez que se crea la página) y, por supuesto, no se agrega ninguna funcionalidad. En este momento, acabo de recibir la impresión onclick en la página, pero finalmente se vinculará a otra página. Alguna idea sobre lo que está mal?ASP.NET gridview fila onclick

Además, gracias a la comunidad stackoverflow en general. Esta comunidad siempre ha sido de gran ayuda. Planeo pasar algunos mensajes este fin de semana y empiezo a responder preguntas lo más posible para retribuir un poco.

C del lado del servidor #

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+"')"); 

     } 

-lado del cliente Javascript

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

Respuesta

9

estoy usando esto en el RowDataBound de mi GridView, añadir el atributo para seleccionar la fila:

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

Y esto para capturar el evento cuando un usuario hace clic en la fila:

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

Parece que está utilizando un evento onclick del lado del servidor. Estoy vinculando un método de JavaScript con mi evento onclick. El primer problema, sin embargo, es que ni siquiera agrega los atributos en el enlace de datos, y creo que estoy usando el mismo método que tú para eso. ¿Viste alguna diferencia entre mi método y el tuyo? – steventnorris

+0

Sí, es un clic en el servidor. Si necesita un javascript onclick, le sugiero que verifique su evento (RowDataBound). ¿Tu GridView contiene el evento? Algo como 'code'grv.RowDataBound + = dataTbl_RowDataBound' code'? Porque ambos métodos son muy similares. –

+0

... Me siento muy tonto. Gracias por señalar lo obvio. Es difícil llamar a un método si el evento ni siquiera sabe hacerlo. – steventnorris

3

Para hacer esto en jQuery, simplemente obtener el evento fila clic así:

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

Con eso, recomiendo el establecimiento de la TR ID a la clave principal para el objeto que se muestra en La fila.

3

¿Está configurado el Grid para llamar al evento dataTbl_RowDataBound? Si depura con un punto de interrupción en ese evento, ¿ese evento se dispara?

+0

Y se comete la tontería de pequeños errores. Tuve un problema en mi llamada al evento. Gracias. – steventnorris

Cuestiones relacionadas