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…
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 llamadaFooterInputs
. El métodoCreateFooterBtns()
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 llamadaFooterBtns
. El métodoCreateFooterRow()
está agregando cada control deFooterInputs
yFooterBtns
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 propiedadFooterRow
resulta en unaNullReferenceException
. Para solucionar esto,CreateFooterRow()
debe ser llamado en el controlador de eventosPage_Load
en lugar dePage_PreRender
, y los controles deben ser creados antes en el ciclo de vida de la página (por ejemplo, enPage_Init
).Además, es posible que no se esté ejecutando el controlador de eventos de clic para
Btn1
porque su propiedadOnClick
no está configurada. La líneaAddHandler Btn1.Click, AddressOf Btn1_Click
debe ser reemplazada porBtn1.OnClick = AddressOf Btn1_Click
para asignar correctamente el controlador de eventos de clic.