es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede disparar el evento de clic del botón en la fila de pie de un GridView creado programáticamente.

Private Sub CrearEntradasPie()

    FooterInputs.Add(New TextBox With {.ID = "Insert1"})

    FooterInputs.Add(New TextBox With {.ID = "Insert2"})

    Dim Insert3 As New DropDownList With {.ID = "Insert3"}
    Insert3.Items.Add("A")
    Insert3.Items.Add("B")
    Insert3.Items.Add("C")
    FooterInputs.Add(Insert3)

End Sub

Private Sub CrearBotonesPie()

    Dim Btn1 As New Button With {.Text = "Button1", .CssClass = "btn btn-info"}
    AddHandler Btn1.Click, AddressOf Btn1_Click
    FooterBtns.Add(Btn1)

    FooterBtns.Add(New Button With {.CommandName = "Insert", .Text = "Añadir", .CssClass = "btn btn-success"})

    Dim ResetBtn As New HtmlButton With {.InnerText = "Reset"}
    ResetBtn.Attributes("type") = "reset"
    ResetBtn.Attributes("class") = "btn btn-danger"
    FooterBtns.Add(ResetBtn)

End Sub

Protected Sub CrearFilaPie()

    For i = 0 To 2
        With GridView1.FooterRow
            .Cells(i).Controls.Add(FooterInputs(i))
            .Cells(i + 3).Controls.Add(FooterBtns(i))
        End With
    Next

End Sub

La mayoría de las soluciones hablarían sobre el ciclo de vida de la página y los controles que deberían crearse antes, pero se produce la siguiente excepción en la línea With GridView1.FooterRow, a menos que CreateFooterRow() esté en Page_PreRender (probablemente porque el GridView no se ha construido con filas hasta la etapa de PreRender).

System.NullReferenceException: ‘Referencia a objeto no establecida como instancia de un objeto.’

Luego, cuando se llama a CreateFooterRow() en Page_PreRender, incluso si CreateFooterInputs() y CreateFooterBtns() están en Page_Init, el botón Btn1 no puede activar el evento de clic…

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El código proporcionado está creando una fila de pie de página para un control GridView en ASP.NET utilizando VB.NET. El método CreateFooterInputs() está creando tres controles de entrada (dos cuadros de texto y una lista desplegable) y los está agregando a una lista llamada FooterInputs. El método CreateFooterBtns() está creando tres controles de botón (uno con un controlador de eventos de clic, uno con un nombre de comando y otro con un tipo de reinicio) y los está agregando a una lista llamada FooterBtns. El método CreateFooterRow() está agregando cada control de FooterInputs y FooterBtns a la celda correspondiente en la fila de pie de página del control GridView.

    El problema con el código es que el control GridView1 aún no se ha construido completamente con filas, por lo que intentar acceder a la propiedad FooterRow resulta en una NullReferenceException. Para solucionar esto, CreateFooterRow() debe ser llamado en el controlador de eventos Page_Load en lugar de Page_PreRender, y los controles deben ser creados antes en el ciclo de vida de la página (por ejemplo, en Page_Init).

    Además, es posible que no se esté ejecutando el controlador de eventos de clic para Btn1 porque su propiedad OnClick no está configurada. La línea AddHandler Btn1.Click, AddressOf Btn1_Click debe ser reemplazada por Btn1.OnClick = AddressOf Btn1_Click para asignar correctamente el controlador de eventos de clic.

Comments are closed.