martes, 4 de diciembre de 2007

Confirmación de borrar en un Grid.

Este truquito lo he visto en un par de cientos de páginas y blog sa través del mundo mundial, pero no me puedo resistir a publicarlo ya que me parece tan simple, tan bonito y tan cómodo que merece la pena dedicar estos minutos en plantarlo a los cuatro lectores que siguen este blog.

Tengo un dataGrid , o gridView, y le he puesto tremendo botonazo para cargarme una fila. Pero haciendo pruebas me encuentro con que he hecho desaparecer media hora de trabajo que me costó introducir un test de pruebas (es una aplicación para gestionar test de autoescuela) sin tan siquiera avisarme de la barbaridad que iba a hacer.

Me acuerdo que ya he visto la solución por algún lado y, efectivamente, está en múltiples sitios pero creo que puedo mejorar la comunicación y explicarlo aún más sencillo.

En javascript hay una serie de métodos que abren una ventana de alerta. Uno de ellos se llama “confirm();” que abre la típica ventana de ¿Estás seguro?

Este caso específico lo he implementado para un botón de un grid, pero nos vale para cualquier control tipo botón o similar.

asp:button id="Button1" runat="server"
CausesValidation="False"
CommandName="Delete"
Text="Borrar"
CssClass="boton"
OnClientClick="return confirm('¿Está seguro de borrar esta Pregunta?');" />


Como vés es un botón normal y corriente, con un CommandName al estar integrado en un Grid. De aquí solamente hay que quedarse con la copla de las partes subrayadas.

OnClientClick”, que nos permite que este comportamiento suceda en el cliente, “return” que le devuelve al cliente si el usuario ha aceptado o no, “confirm()” en donde le decimos que nos abra una ventana de confirmación y el texto de la pregunta.

Por último esto no funcionaría a menos que le digamos que no valide el control, es decir “CausesValidation=false”.

Esto lo que consigue es que si el cliente pulsa aceptar, al retornar true se ejecuta el postback del botón y todo lo que implica. Vamos, en este caso borra la fila. En el caso que se retorne false entonces no realiza el postback y todo se queda como está.

Si quieres la información detallada del porqué pásate por este foro en donde RootK lo explica muy bien.




1 comentario:

Julio aka "el que no tenñia razón" dijo...

Pues a mi uno que quiero mucho me ha hecho poner una doble confirmación:

function ValidarEliminar_2()
{
if (confirm('¿Está vd. seguro/a?\n\nEliminar la obra seleccionada.'))
{
if (confirm('Por favor...\n\nConfirme de nuevo que desea eliminar la obra seleccionada.'))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}

En el botón (LinkButton con imagen incrustada):
OnClientClick="return ValidarEliminar_2();"

Por cierto, que yo no tengo puesto el CausesValidation = False, será el valor por defecto, digo yo.

Saludines