none
Erro ao Exportar GridView RRS feed

  • Pergunta

  • Pessoal

    Ao tentar exportar um griview para o Excel esta ocorrendo a mensagem abaixo:

    Controle 'GridView1' do tipo 'GridView' deve ser inserido em uma marca de formato com runat=server.

    o html da página esta assim:

    <form id="form1" runat="server">
         <asp:Button id="btnexportar" onclick="exportar" runat="server" Text="Exportar para o Excel"></asp:Button>
        <div>
       
            <asp:GridView ID="GridView1" runat="server" BackColor="White" 
                BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" CellPadding="4" 
                EnableModelValidation="true"  >
                <FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
                <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
                <PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
                <RowStyle BackColor="White" ForeColor="#003399" />
                <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
            </asp:GridView>
            <br />
        
            <cc1:MessageBox ID="MessageBox1" runat="server" />
        
        </div>
        <asp:Label ID="Label1" runat="server" 
            style="font-weight: 700; font-size: x-large; color: #990000" 
            Text="Não Há Multiplicador Cadastrado!!!"></asp:Label>
        </form>

    o form já esta em runat=server assim como o gridview

    Segue o código do botão de exportar.

      'Código para exportar para o Excel
        Sub exportar(ByVal Source As Object, ByVal E As EventArgs)
            exportarExcel(GridView1, "Projeto Flautista")
        End Sub
    
        Sub exportarExcel(ByVal grid As GridView, ByVal saveAsFile As String)
    
            ' O limite de linhas do Excel é  65536
            If grid.Rows.Count.ToString + 1 < 65536 Then
                HttpContext.Current.Response.Clear()
                HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"
                HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" & saveAsFile & ".xls")
                ' Remover caracteres do header - Content-Type
                HttpContext.Current.Response.Charset = ""
                ' desabilita o  view state.
                grid.EnableViewState = False
                Dim tw As New System.IO.StringWriter
                Dim hw As New System.Web.UI.HtmlTextWriter(tw)
                grid.RenderControl(hw)
                ' Escrever o html no navegador
                HttpContext.Current.Response.Write(tw.ToString())
                ' termina o response
                HttpContext.Current.Response.End()
            Else
                HttpContext.Current.Response.Write("Muitas linhas para exportar para o Excel !!!")
            End If
    
        End Sub
    O erro esta acontecendo na linha 

    grid.RenderControl(hw)

    Já acrecentei EnableEventValidation="false" na diretiva PAGE mas mesmo assim continua o erro

    Utilizando VS2010 vb.net


    Julierme Felix - Aprendiz



    quinta-feira, 6 de junho de 2013 12:52

Respostas

  • Julierme a tag <form> não precisa ter o runat="server" essa propriedade somente é colocada nos componentes asp.net para informar que sua ação se tver terá que ser tratada no servidor.


    Junior

    • Marcado como Resposta Julierme Felix quinta-feira, 6 de junho de 2013 13:16
    quinta-feira, 6 de junho de 2013 12:58

Todas as Respostas

  • Julierme a tag <form> não precisa ter o runat="server" essa propriedade somente é colocada nos componentes asp.net para informar que sua ação se tver terá que ser tratada no servidor.


    Junior

    • Marcado como Resposta Julierme Felix quinta-feira, 6 de junho de 2013 13:16
    quinta-feira, 6 de junho de 2013 12:58
  • OK.

    Mas se a retiro do form a mensagem aparece para o botão:

    Controle 'btnexportar' do tipo 'Button' deve ser inserido em uma marca de formato com runat=server.

    <form id="form1">
         <asp:Button id="btnexportar" onclick="exportar" runat=server Text="Exportar para o Excel"></asp:Button>
    Grato,



    Julierme Felix - Aprendiz

    quinta-feira, 6 de junho de 2013 13:07
  • Pesquisei agora e encontrei para usar o código abaixo, acrescentei e funcionou.

     Public Overrides Sub VerifyRenderingInServerForm(ByVal control As System.Web.UI.Control)
    
        End Sub
    Não entendi o porque disso, mas funcionou.


    Julierme Felix - Aprendiz

    • Marcado como Resposta Julierme Felix quinta-feira, 6 de junho de 2013 13:16
    • Não Marcado como Resposta Julierme Felix quinta-feira, 6 de junho de 2013 13:19
    quinta-feira, 6 de junho de 2013 13:16
  • o comando é runat="server" faltou o "";

    Junior

    quinta-feira, 6 de junho de 2013 13:22
  • OK.

    Já esta resolvido.

    Grato,


    Julierme Felix - Aprendiz

    quinta-feira, 6 de junho de 2013 13:38