none
Confirmación borrar fila al pulsar image de boton borrar RRS feed

  • Pregunta

  • Hola,

    Tengo un boton de editar y borrar en mi gridview

                <asp:CommandField HeaderText="ACCIONES" ShowDeleteButton="True"
                    ShowEditButton="True" ButtonType="Image"
                    DeleteImageUrl="~/images/borrar.png" EditImageUrl="~/images/editar.png" />
            </Columns>

    Y tengo OnRowDataBound para que solicite confirmación al borrar una fila al pulsar en la imagen. Con linkbutton me funciona, pero cuando añado una imagen no funciona, me da el error de abajo

    Protected Sub OnRowDataBound(sender As Object, e As GridViewRowEventArgs)
            If e.Row.RowType = DataControlRowType.DataRow AndAlso GridView1.EditIndex <> e.Row.RowIndex Then
                TryCast(e.Row.Cells(3).Controls(2), LinkButton).Attributes("onclick") = "return confirm('¿Realmente quieres borrar esta fila?');

    End If

    System.NullReferenceException was unhandled by user code
      HResult=-2147467261
      Message=Object reference not set to an instance of an object.
      Source=App_Web_qyenixcj
      StackTrace:
           at private_update_descrip.OnRowDataBound(Object sender, GridViewRowEventArgs e) in C:\Users\mi\Documents\Visual Studio 2010\WebSites\WebSIT-PLANI\private\update_descrip.aspx.vb:line 57
           at System.Web.UI.WebControls.GridView.OnRowDataBound(GridViewRowEventArgs e)
           at System.Web.UI.WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, DataControlField[] fields, TableRowCollection rows, PagedDataSource pagedDataSource)
           at System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding)
           at System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data)
           at System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data)
           at System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data)
           at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
           at System.Web.UI.WebControls.DataBoundControl.PerformSelect()
           at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
           at System.Web.UI.WebControls.GridView.DataBind()
           at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()
           at System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls()
           at System.Web.UI.Control.EnsureChildControls()
           at System.Web.UI.Control.PreRenderRecursiveInternal()
           at System.Web.UI.Control.PreRenderRecursiveInternal()
           at System.Web.UI.Control.PreRenderRecursiveInternal()
           at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
      InnerException:

    Me pueden indicar como hacer para que funcione con una imagen en vez de con un linkbutton?

    Muchas gracias

        End Sub

    martes, 7 de marzo de 2017 12:51

Respuestas

  • Muchas gracias Leandro, finalmente lo he conseguido así:

                <asp:TemplateField>            
                <ItemTemplate>
                    <asp:ImageButton ID="DeleteButton" runat="server" ImageUrl="~/images/borrar.png"
                        CommandName="Delete" OnClientClick="return confirm('¿Realmente quieres borrar esta fila?');"
                        AlternateText="Delete" />               
                </ItemTemplate>
                </asp:TemplateField>

    Sin necesidad de evento OnRowDataBound

    Un Saludo

    miércoles, 8 de marzo de 2017 10:03

Todas las respuestas

  • hola

    es que el cast que realizas a LinkButton no debe aplicar por eso devuelve null

    que pasa si haces

    Dim link as LinkButton = TryCast(e.Row.Cells(3).Controls(2), LinkButton)
    
    If link IsNot Nothing Then
    
      link.Attributes("onclick") = "return confirm('¿Realmente quieres borrar esta fila?');
    
    End If

    con esto podras validar si castea correctamente, quizas deberias ver sino debes hacerlo a ImageButton

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de marzo de 2017 13:31
  • Muchas gracias Leandro, finalmente lo he conseguido así:

                <asp:TemplateField>            
                <ItemTemplate>
                    <asp:ImageButton ID="DeleteButton" runat="server" ImageUrl="~/images/borrar.png"
                        CommandName="Delete" OnClientClick="return confirm('¿Realmente quieres borrar esta fila?');"
                        AlternateText="Delete" />               
                </ItemTemplate>
                </asp:TemplateField>

    Sin necesidad de evento OnRowDataBound

    Un Saludo

    miércoles, 8 de marzo de 2017 10:03