2011-01-25 41 views

Respuesta

57

Esto debe hacerlo.

lo encontré aquí: http://forums.asp.net/p/1331581/2678206.aspx

<asp:TemplateField ShowHeader="False"> 
    <ItemTemplate> 
     <asp:ImageButton ID="DeleteButton" runat="server" ImageUrl="~/site/img/icons/cross.png" 
        CommandName="Delete" OnClientClick="return confirm('Are you sure you want to delete this event?');" 
        AlternateText="Delete" />    
    </ItemTemplate> 
</asp:TemplateField> 
+0

Si no desea utilizar una imagen, puede utilizar un LinkButton en lugar de ImageButton como se muestra en la solución de @Saksham-Gupta debajo de –

4

Puede hacerlo utilizando OnClientClick de botón.

OnClientClick="return confirm('confirm delete')" 
+0

gracias, funcionó para mí, pero en forma de mensaje emergente , ¿hay alguna manera de aparecer en la página web en sí no como el cuadro de mensaje –

11

Hice esto un poco diferente. En mi vista de cuadrícula configuré el AutoGenerateDeleteButton="true". Para encontrar el botón Eliminar, uso jQuery y agrego un evento de clic a los Anclas encontrados.

jQuery("a").filter(function() { 
     return this.innerHTML.indexOf("Delete") == 0; 
     }).click(function() { return confirm("Are you sure you want to delete this record?"); 
}); 

Esto es rápido y simple para lo que tengo que hacer. Solo tenga en cuenta que cada ancla en la página que muestra Eliminar será seleccionada por jQuery y tendrá el evento agregado.

+0

Funciona bien. Puede mejorar aún más agregando un selector más específico para buscar anclajes dentro de la cuadrícula si lo necesita. –

0

Estaba teniendo problemas para obtener un comandoField Delete button para aceptar la respuesta 'return false' cuando un usuario hace clic en cancelar en la ventana emergente 'Are you' que obtiene con la función javascript confirm(). No quería cambiarlo a un campo de plantilla.

El problema, como yo lo veo, es que estos commandField Buttons ya tienen Javascript asociado para realizar la devolución de datos. Ninguna cantidad de simplemente agregar la función de confirmación() fue efectiva.

Así es como lo resolví:

usando jQuery, me encontró por primera vez cada botón Borrar de la página (hay varios), entonces manipulado Javascript asociado del botón en función de si el visitante estuvo de acuerdo o se cancela el emergente confirmando arriba.

<script language="javascript" type="text/javascript"> 
$(document).ready(function() { 

       $('input[type="button"]').each(function() { 

        if ($(this).val() == "Delete") { 
         var curEvent = $(this).attr('onclick'); 
         var newContent = "if(affirmDelete() == true){" + curEvent + "};" 
         $(this).attr('onclick',newContent);      
        } 
       }); 
} 

function affirmDelete() {  
       return confirm('Are you sure?'); 
} 
</script> 
1

Prueba esto:

he usado para actualización y Eliminar botones. No toca Editar botón. Puede usar botones generados automáticamente.

protected void gvOperators_OnRowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if(e.Row.RowType != DataControlRowType.DataRow) return; 
     var updateButton = (LinkButton)e.Row.Cells[0].Controls[0]; 
     if (updateButton.Text == "Update") 
     { 
      updateButton.OnClientClick = "return confirm('Do you really want to update?');"; 
     } 
     var deleteButton = (LinkButton)e.Row.Cells[0].Controls[2]; 
     if (deleteButton.Text == "Delete") 
     { 
      deleteButton.OnClientClick = "return confirm('Do you really want to delete?');"; 
     } 

    } 
19

Si su Gridview utilizarse con AutoGenerateDeleteButton="true", puede convertirlo a LinkButton:

  1. Haga clic Tareas de GridView y luego Editar columnas. https://www.flickr.com/photos/32784002@N02/15395933069/

  2. Seleccionar Eliminar en campos seleccionados, y haga clic en Convertir este campo en un TemplateField.A continuación, haga clic en OK : https://www.flickr.com/photos/32784002@N02/15579904611/

  3. Ahora se crearán sus LinkButton. Puede añadir OnClientClick evento al LinkButton así:
    OnClientClick="return confirm('Are you sure you want to delete?'); "

4

que no querían cualquier imagen, así que modifiqué la respuesta dada por @statmaster para que sea simple entrada, junto con las otras columnas.

<asp:TemplateField ShowHeader="False"> 
     <ItemTemplate> 
      <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Delete" OnClientClick="return confirm('Are you sure you want to delete this entry?');">Delete </asp:LinkButton>    
     </ItemTemplate> 
</asp:TemplateField> 

El color del texto se puede cambiar con la propiedad Forecolor.

+0

Esta es la forma más sencilla de eliminar con confirmación en una vista de cuadrícula – JoshYates1980

3

Me gusta esta forma de agregar un mensaje de confirmación antes de eliminar un registro de una vista de cuadrícula. Esta es la definición CommandField anidada dentro de un control web GridView en la página aspx. Aquí no hay nada sofisticado, solo un campo de comando directo.

<asp:CommandField ShowEditButton="true" UpdateText="Save" ShowDeleteButton="True"> 
 
    <ControlStyle CssClass="modMarketAdjust" /> 
 
</asp:CommandField>

Entonces, todo lo que tenía que hacer era añadir algo de código para el evento RowDeleting del control GridView. Este evento desencadena antes de la fila se borra realmente, lo que le permite obtener la confirmación del usuario y cancelar el evento si no desea cancelarla después de todo. Aquí está el código que puse en el controlador de eventos RowDeleting:

Private Sub grdMarketAdjustment_RowDeleting(sender As Object, e As GridViewDeleteEventArgs) Handles grdMarketAdjustment.RowDeleting 
    Dim confirmed As Integer = MsgBox("Are you sure that you want to delete this market adjustment?", MsgBoxStyle.YesNo + MsgBoxStyle.MsgBoxSetForeground, "Confirm Delete") 
    If Not confirmed = MsgBoxResult.Yes Then 
    e.Cancel = True 'Cancel the delete. 
    End If 
End Sub 

Y que parece funcionar bien.

+1

@ la respuesta de statmaster es preferible a esta. En primer lugar, solo necesita poner código en la página aspx (este requiere código tanto en la página aspx como en la página código subyacente). En segundo lugar, se requiere MsgBox para esta solución y es posible que no funcione en un servidor web. Todavía podría usar ScriptManager para mostrar una alerta en el código subyacente, en lugar de usar MsgBox, y funcionaría tanto en Visual Studio como en el servidor web. Pero, ¿por qué no usar simplemente la solución más simple que no requiere ningún código en el código subyacente? –

0

Este código funciona bien para mí.

jQuery("a").filter(function() { 
     return this.innerHTML.indexOf("Delete") == 0; 
     }).click(function() { return confirm("Are you sure you want to delete this record?"); 
}); 
3

me gusta bastante añadiendo el código en el evento GridViewRowDataBound para informar al usuario exactamente qué elemento que están tratando de eliminar. Ligeramente mejor experiencia de usuario?

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 

    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     LinkButton lnkBtnDelete = e.Row.FindControl("lnkBtnDelete") as LinkButton; 

     // Use whatever control you want to show in the confirmation message 
     Label lblContactName = e.Row.FindControl("lblContactName") as Label; 

     lnkBtnDelete.Attributes.Add("onclick", string.Format("return confirm('Are you sure you want to delete the contact {0}?');", lblContactName.Text)); 

    } 

} 
0

Me encanta la solución de JavaScript y tener algunas actualizaciones para trabajar con dinámica ajax carga:

 $(document).on("click", "a", function() { 
     if (this.innerHTML.indexOf("Delete") == 0) { 
      return confirm("Are you sure you want to delete this record?"); 
     } 
    }); 

espero que ayude;)

Cuestiones relacionadas