2010-04-06 15 views
6

Necesito capturar el evento de clic 'Actualizar' con jQuery en un GridView de asp.net y no tengo forma de saber por dónde empezar. Todavía soy bastante nuevo en jQuery. Mi GridView está conectado a un SQLDataSource y, naturalmente, tiene todos los detalles que ofrece esa combinación. Cualquier ayuda sería muy apreciada.Cómo capturar el evento de clic 'Actualizar' en ASP.NET GridView con jQuery

+0

¿Cuál es la "actualización" que los usuarios hacer clic - es un botón, un enlace, o alguna otra cosa? –

Respuesta

8

sólo tiene que añadir el bloque de script en cualquier lugar después de que el GridView se declara y se debe trabajar con la columna de GridView predeterminado no con plantilla. No hay código en el código subyacente, ya que es puramente una solución de Javascript.

Use este si está utilizando una columna de GridView-Tipo de enlace:

<script type="text/javascript"> 
    // a:contains(The text of the link here) 
    $('#<%= theGridViewID.ClientID %> a:contains(Update)').click(function() { 
     alert('Update click event captured from the link!'); 
     // return false: stop the postback from happening 
     // return true or don't return anything: continue with the postback 
    }); 
</script> 

Use este si está utilizando una columna de GridView tipo botón y usted no quiere que su Javascript para bloquear la devolución de datos:

<script type="text/javascript"> 
    // :button[value=The text of the button here] 
    $('#<%= theGridViewID.ClientID %> :button[value=Update]').click(function() { 
     alert('Update click event captured from the button!'); 
    }); 
</script> 

Use este si está utilizando una columna de GridView tipo botón y usted quiere tener el control si se continúa con la devolución de datos o no:

<script type="text/javascript"> 
    // :button[value=The text of the button here] 
    var updateButtons = $('#<%= theGridViewID.ClientID %> :button[value=Update]'); 
    updateButtons 
     .attr('onclick', null) 
     .click(function() { 
      alert('Update click event captured from the button!'); 
      var doPostBack = true; // decide whether to do postback or not 
      if (doPostBack) { 
       var index = updateButtons.index($(this)); 
       // 'Update$' refers to the GridView command name + dollar sign 
       __doPostBack('<%= theGridViewID.UniqueID %>', 'Update$' + index); 
      } 
     }); 
</script> 

Actualización: Creo que esto sería una mejor solución en sustitución de la última (tercera) bloque de script que presenté anteriormente, ya que no tendrá que actualizar la llamada de función __doPostBack manualmente basándose en el nombre del comando , y como tal, debería ser menos propenso a errores:

<script type="text/javascript"> 
    // :button[value=The text of the button here] 
    var updateButtons = $('#<%= theGridViewID.ClientID %> :button[value=Update]'); 
    updateButtons.each(function() { 
     var onclick = $(this).attr('onclick'); 
     $(this).attr('onclick', null).click(function() { 
      alert('Update click event captured from the button!'); 
      var doPostBack = true; // decide whether to do postback or not 
      if (doPostBack) { 
       onclick(); 
      } 
     }); 
    }); 
</script> 

Gracias a Aristos por esta idea. :)

+0

Dije que el bloque de script debería colocarse en algún lugar después de que se declare GridView, pero si por alguna razón insistes en que aparezca en algún lugar antes (en la sección principal quizás), siempre puedes ajustar el script con $ (function() {/* scripts aquí * /}) para que el script solo se ejecute una vez que el DOM esté listo. – Amry

+1

buen trabajo Me gusta el tuyo también. Mi única feria es que realmente intentas recrear el doPostBack: ¿hay alguna manera de obtener lo que realmente existe sobre el control en el evento OnClick, antes de cambiarlo, guardarlo en una variable de función y llamarlo después de su trabajo? – Aristos

+0

@Aristos: buena sugerencia de hecho. Extraño de alguna manera nunca pensé en eso. Actualicé mi respuesta para incluir esto, crédito para usted. :) – Amry

0

Debe adjuntar un detector de eventos del lado del cliente al evento de clic del botón Actualizar [enlace]. No creo que se pueda hacer usando AutoGenerateEditButton = "true" si lo haces de esa manera. Tendrá que usar un TemplateField para poder manipular el botón. Luego puede usar jQuery para enlazar al evento click del botón.

0

Agregue la columna de actualización a las plantillas de columnas. Conviértalo en una columna personalizada, y modifíquelo de tal forma que pueda engancharlo con jquery, es decir, como agregarle una clase css.

2

Ok aquí está mi solución para capturar solo una actualización (o más) de un botón.

Este es el código javascript que corro en la actualización clic

<script type="text/javascript">   
    function NowRunTheUpdate(){ 
     alert("ok I capture you"); 
    } 
</script> 

y aquí está el código de la página

`<asp:GridView ID="MyGridView" runat="server" OnRowDataBound="MyGridView_RowDataBound" ... >` 

    <asp:ButtonField Text="update" CommandName="Update" ButtonType="Button" /> 
    ... 

Aquí está el código thats de correr atrás y establece el código JavaScript.

protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // loop all data rows 
     foreach (DataControlFieldCell cell in e.Row.Cells) 
     { 
      // check all cells in one row 
      foreach (Control control in cell.Controls) 
      { 
       // I go to get the button if exist 
       Button button = control as Button; 
       if (button != null && button.CommandName == "Update") 
        // Add delete confirmation 
        button.OnClientClick = "NowRunTheUpdate();"; 
      } 
     } 
    } 
} 
0

Gridview no es más que una mesa con un montón de "tr" y "td". Si entiendes ese concepto, será fácil para ti manejar cualquier cosa en el lado del cliente. Si habilitó todo automáticamente, entonces será un enlace que resultará en Editar, Eliminar, Actualizar o Cancelar (Verificar origen de vista).El código que figura a continuación debe capturar el evento de actualización clic:

$("a:contains(Update)").live("click", function() { 
    //alert("hi"); do what needs to be done 
    return false;//would not sent the control back to server 
    }); 

HTH

+0

@Raja Me gusta esta idea, necesita algo de trabajo en caso de que tenga muchas grillas, y asegúrese de no entrar en conflicto con otros botones de actualización, pero me gusta. También necesitas jQuery pero yo lo uso de todos modos. Y la mejor parte de mi idea es que no es necesario hacer un bucle en la red en código subyacente. Trataré de probarlo y tal vez usarlo. – Aristos

+0

@Raja Compruebo ahora el código y creo que necesita algo más, si puede ayudar con eso. Esto no es un enlace sino una entrada, y luego la entrada hace el postBack onClick. Cómo se puede capturar y guardar el postBack que todo listo existe dentro de la entrada (usando jQuery? – Aristos

+0

@Raja aquí está el código que necesita para insertar su OnLick. ¿Puede ayudarnos? – Aristos

Cuestiones relacionadas