none
Controlar evento botón Gridview RRS feed

  • Pregunta

  • Hola a Todos!

    Quería saber cómo controlar el evento tanto de un botón eliminar, como el de modificar del tipo CommandField, (o del cualquier otro tipo de botón), dentro de un gridview.

    He probado a dar en "Editar Plantilla", como he visto en algún foro que hablaba del tema, pero no me aparece ningún botón para pulsar ni nada de eso....

    Muchas gracias!

    lunes, 21 de mayo de 2012 9:43

Todas las respuestas

  • Hola, creo que he entendido un par de cosas....

    Para los botones del tipo CommandField, evento RowDeleting ejecuta una acción ANTES de eliminar el registro, y RowDeleted ejecuta la acción DESPUÉS de eliminar el registro...

    Pero me surgen 2 dudas paralelas:

    1.- Cómo puedo gestionar el propio evento de eliminar el registro? No acciones previas o posteriores a la eliminación, si no la propia eliminación en si...

    2.- En el caso de la actualización, cuando pulso el botón para editar, me permite editar los campos del registro... y mientras está en edición, si pulso en Cancelar, cancela la edición, pero si pulso en Aceptar no hace nada.... ¿Cómo puedo controlar ese evento?

    Muchas gracias!!

    martes, 22 de mayo de 2012 0:07
  • Alguna idea????
    martes, 22 de mayo de 2012 19:06
  • Veamos, ¿qué origen de datos estás usando? Si no estás usando el DataBinding puedes hacer el borrado en el evento RowDeleting, ahí recuperas el identificador del registro en cuestión, borrar el registro en la base de datos y recargas el gridview. Si usa el DataBinding pues casi que no tienes que hacer nada...

    Atentamente, Sergio.

    Blog
    Twitter

    miércoles, 23 de mayo de 2012 7:10
  • A ver, yo he creado desde la interfaz gráfica el gridview, así como su sqldatasource asociado a él.

    A continuación en el evento Page_Load, he creado un DataSet con su SQLDataAdapter y asigno el resultado al gridview.

    Entiendo que eso no es un DataBinding.... El caso es que en el caso de Eliminar, con el botón que asigno automáticamente del tipo CommandField en el Gridview, me elimina los registros sin problemas... lo único que si quiero que haga algo antes o después, utilizaré el evento RowDeleting o RowDeleted.

    Lo que querría saber es si hay alguna forma de controlar el evento de eliminar el registro como tal, en vez de que lo haga de forma automática.

    Por otro lado, estaba lo del botón EDIT. Cuando lo pulso me aparecen los botones de Actualizar y Cancelar. Si le doy a Cancelar, me vuelve al botón EDIT sin cambiar nada... Pero si le doy a actualizar, me da un error, o simplemente no me hace nada... Así que lo que querría es saber qué evento es el que controla la actualización.... ya que por lo que he visto RowUpdating es para las acciones de ANTES de actualizar, y RowUpdated es para DESPUÉS de actualizar.... pero no sé qué evento es el que controla la actualización en si misma...

    miércoles, 23 de mayo de 2012 9:33
  • Lo que querría saber es si hay alguna forma de controlar el evento de eliminar el registro como tal, en vez de que lo haga de forma automática.

    Podrias hacer algo así

    void GridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
      // Haces tu el borrado manualmente 
    
      // Cancelas la operación de borrado "automática".
      e.Cancel = true;
    }  

    Pero si le doy a actualizar, me da un error, o simplemente no me hace nada...

    Habría que ver que error te está dando.

    pero no sé qué evento es el que controla la actualización en si misma...

    Creo que de igual forma puedes hacer algo así

    void GridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
      // Haces tu la actualización manual
    
      // Cancelas la operación de actualización "automática" 
      e.Cancel = true;
    }



    Atentamente, Sergio.

    Blog
    Twitter

    miércoles, 23 de mayo de 2012 9:58
  • Vale, eso creo que podría servirme.... voy a intentar hacerlo a ver qué tal.

    Pero una cosa... no habría que hacer el e.cancel lo primero??n o daría igual???

    Muchas gracias Crack!!!

    miércoles, 23 de mayo de 2012 10:07
  • Pero una cosa... no habría que hacer el e.cancel lo primero??n o daría igual???

    Creo que da igual, pero sería cuestión de probar.


    Atentamente, Sergio.

    Blog
    Twitter

    miércoles, 23 de mayo de 2012 10:10
  • Hola de nuevo Sergio.

    A ver... he estado haciendo varias pruebas, y me surgen 2 problemillas... con algunos gridview, (Sin modificar en nada el evento del botón delete), me da2 este error:

    Instrucción DELETE en conflicto con la restricción REFERENCE "FK_PaginasWeb_Gestor_BBDD". El conflicto ha aparecido en la base de datos "PaginasWeb", tabla "dbo.PaginasWeb", column 'IDGestorBBDD'.

    Se terminó la instrucción.

    Eso entiendo que es por la restricción que tiene, dado que el gestor de BBDD está asociado ya a una Web...

    Pero cómo puedo capturar este error para que no me salga esa web de error, si no que me aparezca un aviso de que no puede ser eliminado o algo así?

    Por otro lado, en la Edición, cuando pulso en EDIT, me aparecen los campos del registro del gridview como textbox.... ¿Cómo puedo hacer para que cuando le de a Actualizar, y haga lo que tenga que hacer, a continuación pasen esos textbox al estado en el que estaban antes de pulsar en EDIT?

    Muchas gracias!!!

    miércoles, 23 de mayo de 2012 10:52
  • Eso entiendo que es por la restricción que tiene, dado que el gestor de BBDD está asociado ya a una Web...

    Efectivamente, el error se debe a eso.

    Pero cómo puedo capturar este error para que no me salga esa web de error, si no que me aparezca un aviso de que no puede ser eliminado o algo así?

    Hay muchas formas de atacar el problema.

    - Una es hacer la comprobación de grabar en la base de datos.

    - Otra es capturar la excepción de tipo sql y ver que es exactamente ese tipo de excepcion (puede ser otra, por ejemplo, no hay conectividad en la base de datos).

    Ambas solución tienen sus pro y sus contras, aunque a mi me gusta más la primera.

    La segunda opción se planteria así

    try
    {
      // Codigo para grabar
    }
    catch (SqlException ex1)
    {
      if (ex1.Number == 10)
      {
        // Mostrar el error
      }
    }
    catch (Excepcion ex2)
    {
      // Mostrar error genérico
    }

    He puesto que Number es 10, pero habría que ver cual es el código referente a conflicto en el borrado.

    http://msdn.microsoft.com/es-es/library/system.data.sqlclient.sqlexception.number(v=vs.80)

    ¿Cómo puedo hacer para que cuando le de a Actualizar, y haga lo que tenga que hacer, a continuación pasen esos textbox al estado en el que estaban antes de pulsar en EDIT?

    La verdad es que hace mucho timpo que no trabajo con un GridView, así que no se si el método EndEdit te valdra

    http://msdn.microsoft.com/es-es/library/ms158621(v=vs.80).aspx


    Atentamente, Sergio.

    Blog
    Twitter

    miércoles, 23 de mayo de 2012 11:42
  • Hola!

    Tengo algunos problemillas...

    En cuanto a la eliminación, no entiendo a qué te refieres con lo de "Una es hacer la comprobación de grabar en la base de datos"

    En cuanto a lo de Editar, el EndEdit no me lo reconoce...

    He probado primero con e.EndEdit, pero no me lo reconoce, y entiendo que es porque el "e" es un row (ya que el atributo es "e As System.Web.UI.WebControls.GridViewUpdateEventArgs").

    Después he probado con gridview.endEdit, pero tampoco me funciona... He estado mirando el enlace que me pasaste, pero no me aclara mucho...

    Por qué puede no funcionar? Hay algún otro modo?

    Muchas gracias!!!!!

    domingo, 27 de mayo de 2012 19:52
  • No se le ocurre a nadie una solución??

    Help please!!

    viernes, 1 de junio de 2012 10:02