Avatar billede Kim Neesgaard Seniormester
19. september 2007 - 16:57 Der er 10 kommentarer og
1 løsning

Download GridView til Excel via MasterPage

Mange steder på nettet kan man se, hvordan man downloader fra et Gridview til Excel og jeg har selv brugt denne kode flere gange på sider, der ikke indeholder en masterpage.

Benytter jeg koden på en side med en masterpage, så går det galt her:

gvRawDataList.RenderControl(myHtmlTextWriter)

og man får fejlen:

"Control 'ctl00_ContentPlaceHolder1_gvRawDataList' of type 'GridView' must be placed inside a form tag with runat=server."

Jeg får ikke lov til at sætte Form på siden, da det allerede står i masterpage - hvordan kringler man den?
Avatar billede kalp Novice
19. september 2007 - 18:31 #1
problemet lægger i din kode..

så må jeg se din kode til masterpagen?
du skal huske at form elementerne skal være rundt om contentplaceholderen den har i sig
Avatar billede Kim Neesgaard Seniormester
19. september 2007 - 19:52 #2
Kommer her:

<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Off Spec Report</title>
</head>
<body style="background-color: #FFFFFF; margin: 0px; padding: 0px; border-top:0px;">
    <form id="form1" runat="server">
    <div>
        <table  width="100%" cellspacing="0">
            <tr>
            <td colspan="3" style="background-image: url('graphics/Design2007-goldbackground.jpg'); background-repeat: repeat; height: 20px;">
            </td>
            </tr>
            <tr>
                <td style="background-image: url('graphics/Design2007-left.jpg'); background-repeat: no-repeat; height: 65px; padding:0; width: 165px;">
                </td>
                <td style="background-image: url('graphics/Design2007-background.jpg'); background-repeat: repeat; height: 65px;">
                </td>
                <td style="background-image: url('graphics/Design2007-right.jpg'); background-repeat: no-repeat;  background-position: right;">
                </td>
            </tr>
            <tr>
              <td style="height: 800px; background-image: url('graphics/Design2007-background.jpg'); background-repeat: repeat; vertical-align: top;"> 
              <asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Names="Arial" Font-Size="X-Small"
                        ForeColor="Black" Text="Version 0.1.0"></asp:Label><br />
                  <br />
                    <asp:Menu ID="Menu1" runat="server" BackColor="#FFFBD6" DataSourceID="SiteMapDataSource1"
                      DynamicHorizontalOffset="2" Font-Names="Tahoma" Font-Size="Small" ForeColor="#990000"
                      StaticSubMenuIndent="10px" ToolTip="Select Menu">
                      <StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
                      <DynamicHoverStyle BackColor="#990000" ForeColor="White" />
                      <DynamicMenuStyle BackColor="#FFFBD6" />
                      <StaticSelectedStyle BackColor="#FFCC66" />
                      <DynamicSelectedStyle BackColor="#FFCC66" />
                      <DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
                      <StaticHoverStyle BackColor="#990000" ForeColor="White" />
                  </asp:Menu>
                 
              </td>
              <td colspan="2" style="vertical-align:top; padding:5px;">
                <asp:contentplaceholder id="ContentPlaceHolder1" runat="server"></asp:contentplaceholder>
                  <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
                </td>
            </tr>
            <tr>
            <td colspan="3" style="background-image: url('graphics/Design2007-goldbackground.jpg'); background-repeat: repeat; height: 20px;">
            </td>
            </tr>
        </table>
        </div>
    </form>
</body>
</html>
Avatar billede kalp Novice
19. september 2007 - 21:10 #3
den tror jeg faktisk er fin.. må jeg se den side hvor problemet er på?
Avatar billede Kim Neesgaard Seniormester
19. september 2007 - 21:24 #4
Kommer her:

Protected Sub btnExcel_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnExcel.Click
        Dim FileName As String

        ' Set the content type to Excel
        'FileName = "Cust. Spec. Dispensations - " & TBSiteList.Text & " - " & StartDate.Text & " to " & EndDate.Text & ".xls"
        FileName = "Test.xls"

        Response.ContentType = "application/vnd.ms-excel"
        Response.ContentEncoding = System.Text.Encoding.GetEncoding(1252) 'For at æøå downloades korrekt
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName)

        'Turn off the view state
        Me.EnableViewState = False

        'Remove the charset from the Content-Type header
        Response.Charset = String.Empty

        Dim myTextWriter As New System.IO.StringWriter()
        Dim myHtmlTextWriter As New System.Web.UI.HtmlTextWriter(myTextWriter)

        'Get the HTML for the control
        gvRawDataList.RenderControl(myHtmlTextWriter)

        'Write the HTML to the browser
        Response.Write(myTextWriter.ToString())

        'End the response
        Response.End()

        Me.EnableViewState = True

    End Sub
Avatar billede kalp Novice
19. september 2007 - 21:26 #5
jeg går ud fra det der er noget codebehind i VB.NET?
jeg tænkte mere på markup koden:)
Avatar billede neoman Novice
19. september 2007 - 23:46 #6
Fra : http://aspalliance.com/771_CodeSnip_Exporting_GridView_to_Excel

----------
If you use this code and try to export the GridView control, you will see an error message saying that the GridView control must be placed inside the form tags with the runat = server attribute.

This is pretty confusing, since your GridView is already inside the form tags and also contains the runat = server attribute. You can easily resolve this error by adding the following lines.

Listing 3: Overiding VerifyRenderingInServerForm Method

public override void VerifyRenderingInServerForm(Control control)
{
  /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
    server control at run time. */

}
---------------
Avatar billede Kim Neesgaard Seniormester
21. september 2007 - 10:14 #7
neoman -> Jeg kan ikke helt se, hvad jeg skal indsætte - vil du fortælle mig helt konkret, hvad der skal indsættes hvor?

kalp -> her er mark up:

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="RawDataList.aspx.vb" Inherits="RawDataList" title="Untitled Page" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <table style="width: 100%">
        <tr>
            <td colspan="2">
                <asp:Label ID="lblTitle" runat="server" Font-Bold="True" Font-Names="Tahoma"
                    Font-Size="Large" Style="background-color: #ab8422" Width="100%" ForeColor="Gold">Raw Data List</asp:Label></td>
        </tr>
        <tr>
            <td style="vertical-align: top; height: 135px;">
                <br />
                <asp:DropDownList ID="ddlMatType" runat="server" Font-Names="Tahoma" AutoPostBack="True" Width="150px">
                    <asp:ListItem Selected="True">Select Material Type</asp:ListItem>
                    <asp:ListItem Value="INT">Intermediates</asp:ListItem>
                    <asp:ListItem Value="FIN">Finished Goods</asp:ListItem>
                </asp:DropDownList>
                <br />
                <br />
                <asp:DropDownList ID="ddlPlant" runat="server" Font-Names="Tahoma" AutoPostBack="True" Width="150px">
                    <asp:ListItem Selected="True">Select Plant</asp:ListItem>
                    <asp:ListItem Value="1000">Denmark</asp:ListItem>
                    <asp:ListItem Value="1800">US</asp:ListItem>
                    <asp:ListItem Value="1950">China</asp:ListItem>
                    <asp:ListItem Value="1900">Brazil</asp:ListItem>
                    <asp:ListItem Value="All">All Plants</asp:ListItem>
                </asp:DropDownList><br />
                <br />
                <asp:DropDownList ID="ddlArea" runat="server">
                    <asp:ListItem Selected="True">Select Area</asp:ListItem>
                    <asp:ListItem>DPQ</asp:ListItem>
                    <asp:ListItem>SCO</asp:ListItem>
                </asp:DropDownList><br />
                <br />
                <asp:Button ID="btnRun" runat="server" Text="Generate Data List" Width="148px" Font-Names="Tahoma" /></td>
            <td style="height: 135px; vertical-align: top;">
            <br />
                <table style="width: 165px">
                    <tr>
                        <td>
                <asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Names="Tahoma" Font-Size="Small"
                    Text="From Date:" Width="138px"></asp:Label></td>
                        <td>
            <asp:Label ID="Label2" runat="server" Font-Bold="True" Font-Names="Tahoma" Font-Size="Small"
                    Text="To Date:" Width="138px"></asp:Label></td>
                    </tr>
                    <tr>
                        <td>
                            <asp:TextBox ID="tbFromDate" runat="server" Font-Names="Tahoma" Font-Size="Small"></asp:TextBox><br />
                            <cc1:calendarextender id="CalExtFromDate" runat="server" targetcontrolid="tbFromDate" Format="yyyy-MM-dd"></cc1:calendarextender>
                        </td>
                        <td>
                            <asp:TextBox ID="tbToDate" runat="server" Font-Names="Tahoma" Font-Size="Small"></asp:TextBox><br />
                            <cc1:calendarextender id="CalExtToDate" runat="server" targetcontrolid="tbToDate" Format="yyyy-MM-dd"></cc1:calendarextender>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                &nbsp;<asp:Label ID="lblInfo" runat="server" Font-Bold="True" Font-Names="Tahoma"
                    Font-Size="Small" ForeColor="Red" Width="497px"></asp:Label></td>
        </tr>
        <tr>
            <td style="vertical-align: top">
                <asp:ImageButton ID="btnExcel" runat="server" ImageUrl="~/Graphics/Excel.jpg" ToolTip="Download or Open in Excel" /><br />
                <asp:GridView ID="gvRawDataList" runat="server" CellPadding="4" Font-Names="Tahoma" Font-Size="Small"
                    ForeColor="#333333" GridLines="None" AutoGenerateColumns="False" DataKeyNames="Material">
                    <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                    <RowStyle BackColor="#E3EAEB" />
                    <EditRowStyle BackColor="#7C6F57" />
                    <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
                    <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
                    <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                    <AlternatingRowStyle BackColor="White" />
                    <Columns>
                    <asp:BoundField DataField="Batch" HeaderText="Batch" ReadOnly="True" />
                    <asp:BoundField DataField="Material" HeaderText="Material" ReadOnly="True" />
                    <asp:BoundField DataField="MatName" HeaderText="Material Name" ReadOnly="True" />
                    <asp:BoundField DataField="Plant" HeaderText="Plant" ReadOnly="True" />
                    <asp:CommandField SelectText="Details" ShowSelectButton="True" />
                    </Columns>
                </asp:GridView>
              </td>
            <td style="vertical-align: top">
                &nbsp;</td>
        </tr>
    </table>
    <asp:ScriptManager id="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:TextBox ID="x" runat="server" Height="132px" TextMode="MultiLine" Width="762px"></asp:TextBox>
</asp:Content>
Avatar billede neoman Novice
21. september 2007 - 11:38 #8
læg :

Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
End Sub

i din code-behind
Avatar billede neoman Novice
21. september 2007 - 12:16 #9
dette virker:

Imports System.IO
Partial Class Excel2
    Inherits System.Web.UI.Page
    Private ExportStuff As Boolean = False

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        ExportStuff = True
    End Sub

    Public Sub ExportGridToExcel(ByVal grdGridView As GridView, ByVal fileName As String)
        '    Dim FileName As String

        ' Set the content type to Excel
        'FileName = "Cust. Spec. Dispensations - " & TBSiteList.Text & " - " & StartDate.Text & " to " & EndDate.Text & ".xls"
        '  FileName = "Test.xls"

        Response.ContentType = "application/vnd.ms-excel"
        Response.ContentEncoding = System.Text.Encoding.GetEncoding(1252) 'For at æøå downloades korrekt
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName)

        'Turn off the view state
        Me.EnableViewState = False

        'Remove the charset from the Content-Type header
        Response.Charset = String.Empty

        Dim myTextWriter As New System.IO.StringWriter()
        Dim myHtmlTextWriter As New System.Web.UI.HtmlTextWriter(myTextWriter)

        'Get the HTML for the control
        GridView1.RenderControl(myHtmlTextWriter)

        'Write the HTML to the browser
        Response.Write(myTextWriter.ToString())

        'End the response
        Response.End()

        Me.EnableViewState = True


    End Sub

    Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
    End Sub

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        If ExportStuff Then
            ExportGridToExcel(GridView1, "StudentMarks.xls")
        End If

        MyBase.Render(writer)
    End Sub
End Class
Avatar billede Kim Neesgaard Seniormester
25. september 2007 - 16:41 #10
Alletiders! Lægger du et svar?
Avatar billede neoman Novice
25. september 2007 - 17:47 #11
jeps
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester