Gegevens exporteren in een DataGrid op een ASP. NET WebForm naar Microsoft Excel

Samenvatting

Gebruik deze stapsgewijze handleiding om een DataGrid-webserverbesturingselement in te vullen op een ASP.NET WebForm en vervolgens de inhoud van de DataGrid te exporteren naar Microsoft Excel.

Technieken

In dit artikel worden twee technieken beschreven voor het exporteren van de gegevens in de DataGrid:

  • Het Excel MIME-type (of inhoudstype) gebruiken

    Met code aan de serverzijde kunt u de DataGrid verbinden met uw gegevens en de gegevens openen in Excel op een clientcomputer. U doet dit door het ContentType in te stellen op application/vnd.ms-excel. Nadat de client de nieuwe stream heeft ontvangen, worden de gegevens weergegeven in Excel alsof de inhoud is geopend als een nieuwe pagina in de webbrowser.

  • Excel Automation gebruiken

    Met code aan de clientzijde kunt u de HTML uit de DataGrid extraheren en vervolgens Excel automatiseren om de HTML weer te geven in een nieuwe werkmap. Met Excel Automation worden de gegevens altijd buiten de browser weergegeven in een Excel-toepassingsvenster. Een voordeel van Automation is dat u Excel programmatisch kunt beheren als u de werkmap wilt wijzigen nadat de gegevens zijn geƫxporteerd. Omdat Excel echter niet is gemarkeerd als veilig voor het uitvoeren van scripts, moeten uw clients beveiligingsinstellingen toepassen in de webbrowser die Automatisering toestaan.

Stapsgewijze

  1. Start Visual Studio .NET. Wijs in het menu Bestand naar Nieuw en klik vervolgens op Project.

  2. Klik in het deelvenster Projecttypen op Visual Basic Projects. Klik onder Sjablonen op ASP.NET webtoepassing. Geef de toepassing de naam ExcelExport en klik op OK.

    WebForm1 wordt voor u weergegeven in de ontwerpweergave.

  3. Klik in Solution Explorer met de rechtermuisknop op WebForm1.aspx en klik vervolgens op Naam wijzigen. Wijzig de naam van het bestand in Bottom.aspx.

  4. Klik in het menu Weergave op HTML-bron om de volgende DataGrid toe te voegen tussen de

    en
    Tags:

    <asp:datagrid id="DataGrid1" runat="server" GridLines="Vertical" CellPadding="3" BackColor="White"
    BorderColor="#999999" BorderWidth="1px" BorderStyle="None" Width="100%" Height="100%" Font-Size="X-Small"
    Font-Names="Verdana">
    <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#008A8C"></SelectedItemStyle>
    <AlternatingItemStyle BackColor="Gainsboro"></AlternatingItemStyle>
    <ItemStyle BorderWidth="2px" ForeColor="Black" BorderStyle="Solid" BorderColor="Black" BackColor="#EEEEEE"></ItemStyle>
    <HeaderStyle Font-Bold="True" HorizontalAlign="Center" BorderWidth="2px" ForeColor="White" BorderStyle="Solid"
    BorderColor="Black" BackColor="#000084"></HeaderStyle>
    <FooterStyle ForeColor="Black" BackColor="#CCCCCC"></FooterStyle>
    <PagerStyle HorizontalAlign="Center" ForeColor="Black" BackColor="#999999" Mode="NumericPages"></PagerStyle>
    </asp:datagrid>
    
    
  5. Klik in het menu Beeld op Ontwerpen om terug te keren naar de ontwerpweergave.

    De DataGrid wordt weergegeven op het webformulier.

  6. Klik in het menu Beeld op Code om de code achter het webformulier weer te geven. Voeg de volgende code toe aan de Page_Load gebeurtenis-handler:

    Opmerking U moet de gebruikersnaam> en het wachtwoord=<sterk wachtwoord> van de gebruikers-id <wijzigen in de juiste waarden voordat u deze code uitvoert. Zorg ervoor dat het gebruikersaccount de juiste machtigingen heeft om deze bewerking uit te voeren op de database.

    ' Create a connection and open it.
    Dim objConn As New System.Data.SqlClient.SqlConnection("User ID=<username>;Password=<strong password>;Initial Catalog=Northwind;Data Source=SQLServer;")
    objConn.Open()
    
    Dim strSQL As String
    Dim objDataset As New DataSet()
    Dim objAdapter As New System.Data.SqlClient.SqlDataAdapter()
    
    ' Get all the customers from the USA.
    strSQL = "Select * from customers where country='USA'"
    objAdapter.SelectCommand = New System.Data.SqlClient.SqlCommand(strSQL, objConn)
    ' Fill the dataset.
    objAdapter.Fill(objDataset)
    ' Create a new view.
    Dim oView As New DataView(objDataset.Tables(0))
    ' Set up the data grid and bind the data.
    DataGrid1.DataSource = oView
    DataGrid1.DataBind()
    
    ' Verify if the page is to be displayed in Excel.
    If Request.QueryString("bExcel") = "1" Then
        ' Set the content type to Excel.
        Response.ContentType = "application/vnd.ms-excel"
        ' Remove the charset from the Content-Type header.
        Response.Charset = ""
        ' Turn off the view state.
        Me.EnableViewState = False
    
    Dim tw As New System.IO.StringWriter()
        Dim hw As New System.Web.UI.HtmlTextWriter(tw)
    
    ' Get the HTML for the control.
        DataGrid1.RenderControl(hw)
        ' Write the HTML back to the browser.
        Response.Write(tw.ToString())
        ' End the response.
        Response.End()
    End If
    
    

    OPMERKING Vervang SQLServer in de code door de naam van uw SQL Server. Als u geen toegang hebt tot een SQL Server die de Northwind-voorbeelddatabase bevat, wijzigt u de connection string om de Voorbeelddatabase Northwind van Microsoft Access 2002 te gebruiken:

    provider=microsoft.jet.oledb.4.0; gegevensbron=C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb

    Als u deze methode selecteert, wijzigt u de bovengenoemde code om de OleDbClient-naamruimte te gebruiken in plaats van de SqlClient-naamruimte.

  7. Klik in het menu Project op HTML-pagina toevoegen. Geef de pagina een naam Top.htm en klik vervolgens op Openen.

    Top.htm wordt weergegeven in de ontwerpweergave.

  8. Klik in het menu Beeld op HTML-bron. Vervang de inhoud van het HTML-bronvenster door de volgende code:

    <html>
    <script language="vbscript">
      Sub Button1_onclick        
    
    Select Case Select1.selectedIndex
    
    Case 0' Use Automation.
          Dim sHTML
          sHTML = window.parent.frames("bottom").document.forms(0).children("DataGrid1").outerhtml
          Dim oXL, oBook
          Set oXL = CreateObject("Excel.Application")
          Set oBook = oXL.Workbooks.Add
          oBook.HTMLProject.HTMLProjectItems("Sheet1").Text = sHTML
          oBook.HTMLProject.RefreshDocument
          oXL.Visible = true
          oXL.UserControl = true
    
    Case 1' Use MIME Type (In a New Window).
          window.open("bottom.aspx?bExcel=1")
    
    Case 2' Use MIME Type (In the Frame).
          window.parent.frames("bottom").navigate "bottom.aspx?bExcel=1"
      End Select
    End Sub
    </script>
    <body>
    Export to Excel Using:
    <SELECT id="Select1" size="1" name="Select1">
    <OPTION value="0" selected>Automation</OPTION>
    <OPTION value="1">MIME Type (In a New Window)</OPTION>
    <OPTION value="2">MIME Type (In the Frame)</OPTION>
    </SELECT>
    <INPUT id="Button1" type="button" value="Go!" name="Button1">
    </body>
    </html>
    
    
  9. Klik in het menu Project op HTML-pagina toevoegen. Geef de pagina een naam Frameset.htm en klik vervolgens op Openen.

    Frameset.htm wordt geopend in de ontwerpweergave.

  10. Klik in het menu Beeld op HTML-bron. Vervang de inhoud van het HTML-bronvenster door de volgende code:

    <html>
    <frameset rows="10%,90%">
    <frame noresize="0" scrolling="no" name="top" src="top.htm">
    <frame noresize="0" scrolling="yes" name="bottom" src="bottom.aspx">
    </frameset>
    </html>
    
    
  11. Klik in Solution Explorer met de rechtermuisknop op Frameset.htm en klik vervolgens op Instellen als startpagina.

  12. Klik in het menu Build op Build Solution.

Probeer het uit!

  1. Klik in het menu Foutopsporing op Starten zonder foutopsporing om de toepassing uit te voeren.

    Nadat de frameset in de webbrowser is geopend, worden in de DataGrid in het onderste frame de gegevens uit de Northwind-database weergegeven.

  2. Klik in de vervolgkeuzelijst op Automation en klik vervolgens op Go.

    De Inhoud van DataGrid wordt buiten de browser weergegeven in het microsoft Excel-toepassingsvenster.

  3. Klik in de vervolgkeuzelijst op MIME-type (in een nieuw venster) en klik vervolgens op Go.

    De inhoud van DataGrid wordt weergegeven in Excel die wordt gehost in een nieuw browservenster.

    OPMERKING Als u wordt gevraagd het Excel-bestand te openen of op te slaan, klikt u op Openen.

  4. Klik in de vervolgkeuzelijst op MIME-type (in het frame) en klik vervolgens op Go.

    De DataGrid-inhoud wordt weergegeven in het onderste frame van de frameset in Excel die wordt gehost in de webbrowser.

    OPMERKING Als u wordt gevraagd het Excel-bestand te openen of op te slaan, klikt u op Openen.

Verwijzingen

Bekijk het artikel in de Microsoft Knowledge Base voor meer informatie:

296717 PRB: Internet Explorer vraagt de gebruiker om een Office-bestand te openen of op te slaan dat is gestreamd vanuit ASP