viernes, 27 de septiembre de 2013

Creando controles dinamicos en el HeaderTemplate del AspxGridView Error Failed to load ViewState

Cuando creamos columnas dinámicas y agregamos HeaderTemplate de esta manera:

 Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        enlazarGrid()

 End Sub

Private Sub enlazarGrid()
            crearControles()
            _objFunciones.cargarGridView(grdGridView, "Id", _dataSource)

 End Sub

  Sub crearControles()
            grdGridView.Columns.Clear()
            grdGridView.TotalSummary.Clear()

            Dim itemTemplate As New GridViewTemplate()

            agregarCommanColumn()
            grdPlanPagos.Columns(0).HeaderTemplate = itemTemplate
End Sub

  Sub agregarCommanColumn()
        If grdGridView.Columns.IndexOf(grdPlanPagos.Columns("CommandColumn")) <> -1 Then
            Return
        End If

        Dim col As New GridViewCommandColumn()
        col.Name = "CommandColumn"
        col.ShowSelectCheckbox = False
        col.VisibleIndex = 0
        col.ButtonType = ButtonType.Image
        col.DeleteButton.Image.Url = "~/images/Menos.png"
        col.DeleteButton.Visible = True
        col.DeleteButton.Image.ToolTip = "Eliminar"
        grdGridView.Columns.Add(col)

    End Sub

Public Class GridViewTemplate

    Implements ITemplate

 Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements System.Web.UI.ITemplate.InstantiateIn
container.Controls.Add(agregarImagenNuevo("cingrdClientInstanceName"))

 End Sub

 Private Function agregarImagenNuevo(ByVal strNombreInstanciaGrid As String) As ASPxImage
        Dim imgAgregar As New ASPxImage
        With imgAgregar
            .ID = "imgAgregar"
            .ToolTip = "Nuevo"
            .ImageUrl = "~/images/Mas.png"
            .ClientSideEvents.Click = "function(s, e) {" & strNombreInstanciaGrid & ".PerformCallback('Agregar');}"
        End With
        Return imgAgregar

    End Function
End Class

Corriendo la pagina web ser veria de esta manera:


Pero al dar clic en el botón + hay un PerformCallback() y se muesta la siguiente pantalla:

Para solucionar este error lo único que tenemos que hacer es agregar las siguientes propiedades al GridView:

<dx:ASPxGridView EnableRowsCache="false" EnableViewState="false" ... >

</dx:ASPxGridView>


1 comentario: