none
Hacer referencia a los GridViews RRS feed

  • Pregunta

  • Hola a todos

    Quiero implementar la exportación a Excel de 2 grids con un solo botón pero no lo logro. En el IDE me permite escribir "For Each grids As Gridview In Me.Controls" pero luego me tira el error "Unable to cast object of type 'System.Web.UI.LiteralControl' to type 'System.Web.UI.WebControls.GridView'. ¿ Como puedo entonces referenciar todos los Gridviews de mi página ?

    Muchas gracias de antemano


    • Editado Raimundo Ferrer martes, 22 de noviembre de 2016 13:02 Me equivoqué en el codigo
    martes, 22 de noviembre de 2016 13:00

Respuestas

  • Hola a todos.

    Después de "googlear" un poco encontré un ejemplo en C# y lo "traduje" a VB y funciona perfectamente, básicamente la diferencia con el código anterior es crear y cargar un array con los GridsViews y un par de cosillas más. Pego el código por si alguien lo necesita, saludos.

        Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim dt As DataTable
            Dim gdvs = New GridView() {gdv_Abiertos, gdv_Cerrados}
            Dim hoja = New String() {"ABIERTOS", "CERRADOS"}

            Using wb As New ClosedXML.Excel.XLWorkbook()
                For i As Integer = 0 To gdvs.Length - 1
                    gdvs(i).EnableViewState = False
                    dt = New DataTable(hoja(i).ToString)
                    For Each cell As TableCell In gdvs(i).HeaderRow.Cells
                        dt.Columns.Add(cell.Text)
                    Next
                    For Each row As GridViewRow In gdvs(i).Rows
                        dt.Rows.Add()
                        For j As Integer = 0 To row.Cells.Count - 1
                            dt.Rows(dt.Rows.Count - 1)(j) = row.Cells(j).Text
                        Next
                    Next
                    wb.Worksheets.Add(dt)
                Next
                Response.Clear()
                Response.Buffer = True
                Response.Charset = ""
                Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
                Response.AddHeader("content-disposition", "attachment;filename=GridView.xlsx")
                Using MyMemoryStream As New MemoryStream()
                    wb.SaveAs(MyMemoryStream)
                    MyMemoryStream.WriteTo(Response.OutputStream)
                    Response.Flush()
                    Response.End()
                End Using
            End Using
        End Sub

    • Marcado como respuesta Raimundo Ferrer lunes, 28 de noviembre de 2016 10:48
    lunes, 28 de noviembre de 2016 10:48

Todas las respuestas

  • For Each grid As GridView In Me.Controls.OfType(Of GridView)
    martes, 22 de noviembre de 2016 13:16
  • For Each grid As GridView In Me.Controls.OfType(Of GridView)
    Gracias, un saludo.
    martes, 22 de noviembre de 2016 14:09
  • Hola, Anibal he probado y nada, cuando hago "Me.Controls.OfType(Of GridView)().Count" me devuelve cero, voy a pegar el código que obtuve de un ejemplo en internet. Tengo el webform con un par de RadioButton, un DropDown y dos Gridview dentro de un <DIV>. Saludos

        Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Response.Write("<script language='javascript'>alert('hay " & Me.Controls.OfType(Of GridView)().Count & "')</script>")
            For Each grids As GridView In Me.Controls.OfType(Of GridView)()
                dt = New DataTable("GridView_Data")
                For Each cell As TableCell In grids.HeaderRow.Cells
                    dt.Columns.Add(cell.Text)
                Next
                For Each row As GridViewRow In grids.Rows
                    dt.Rows.Add()
                    For i As Integer = 0 To row.Cells.Count - 1
                        dt.Rows(dt.Rows.Count - 1)(i) = row.Cells(i).Text
                    Next
                Next
                Using wb As New ClosedXML.Excel.XLWorkbook()
                    wb.Worksheets.Add(dt)
                    Response.Clear()
                    Response.Buffer = True
                    Response.Charset = ""
                    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
                    Response.AddHeader("content-disposition", "attachment;filename=GridView.xlsx")
                    Using MyMemoryStream As New MemoryStream()
                        wb.SaveAs(MyMemoryStream)
                        MyMemoryStream.WriteTo(Response.OutputStream)
                        Response.Flush()
                        Response.End()
                    End Using
                End Using
            Next
        End Sub

    viernes, 25 de noviembre de 2016 16:27
  • Hola a todos.

    Después de "googlear" un poco encontré un ejemplo en C# y lo "traduje" a VB y funciona perfectamente, básicamente la diferencia con el código anterior es crear y cargar un array con los GridsViews y un par de cosillas más. Pego el código por si alguien lo necesita, saludos.

        Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim dt As DataTable
            Dim gdvs = New GridView() {gdv_Abiertos, gdv_Cerrados}
            Dim hoja = New String() {"ABIERTOS", "CERRADOS"}

            Using wb As New ClosedXML.Excel.XLWorkbook()
                For i As Integer = 0 To gdvs.Length - 1
                    gdvs(i).EnableViewState = False
                    dt = New DataTable(hoja(i).ToString)
                    For Each cell As TableCell In gdvs(i).HeaderRow.Cells
                        dt.Columns.Add(cell.Text)
                    Next
                    For Each row As GridViewRow In gdvs(i).Rows
                        dt.Rows.Add()
                        For j As Integer = 0 To row.Cells.Count - 1
                            dt.Rows(dt.Rows.Count - 1)(j) = row.Cells(j).Text
                        Next
                    Next
                    wb.Worksheets.Add(dt)
                Next
                Response.Clear()
                Response.Buffer = True
                Response.Charset = ""
                Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
                Response.AddHeader("content-disposition", "attachment;filename=GridView.xlsx")
                Using MyMemoryStream As New MemoryStream()
                    wb.SaveAs(MyMemoryStream)
                    MyMemoryStream.WriteTo(Response.OutputStream)
                    Response.Flush()
                    Response.End()
                End Using
            End Using
        End Sub

    • Marcado como respuesta Raimundo Ferrer lunes, 28 de noviembre de 2016 10:48
    lunes, 28 de noviembre de 2016 10:48