Come esportare dati in un oggetto DataGrid in un oggetto ASP. Da Net WebForm a Microsoft Excel

Riepilogo

Usare questa guida dettagliata per popolare un controllo server Web DataGrid in un ASP.NET WebForm e quindi esportare il contenuto di DataGrid in Microsoft Excel.

Tecniche

Questo articolo descrive due tecniche per esportare i dati in DataGrid:

  • Uso del tipo MIME di Excel (o del tipo di contenuto)

    Con il codice lato server, è possibile associare DataGrid ai dati e aprire i dati in Excel in un computer client. A tale scopo, impostare ContentType su application/vnd.ms-excel. Dopo che il client riceve il nuovo flusso, i dati vengono visualizzati in Excel come se il contenuto fosse stato aperto come nuova pagina nel Web browser.

  • Uso dell'automazione di Excel

    Con il codice lato client, è possibile estrarre il codice HTML da DataGrid e quindi automatizzare Excel per visualizzare il codice HTML in una nuova cartella di lavoro. Con Automazione Excel, i dati vengono sempre visualizzati all'esterno del browser in una finestra dell'applicazione Excel. Un vantaggio di Automazione è che è possibile controllare Excel a livello di codice se si vuole modificare la cartella di lavoro dopo l'esportazione dei dati. Tuttavia, poiché Excel non è contrassegnato come sicuro per la creazione di script, i client devono applicare le impostazioni di sicurezza nel Web browser che consentono l'automazione.

Procedura dettagliata

  1. Avviare Visual Studio .NET. Scegliere Nuovo dal menu File, quindi fare clic su Progetto.

  2. Nel riquadro Tipi di progetto fare clic su Progetti di Visual Basic. In Modelli fare clic su ASP.NET'applicazione Web. Assegnare all'applicazione il nome ExcelExport e quindi fare clic su OK.

    WebForm1 viene visualizzato in visualizzazione Struttura.

  3. In Esplora soluzioni fare clic con il pulsante destro del mouse su WebForm1.aspx e quindi scegliere Rinomina. Modificare il nome del file in Bottom.aspx.

  4. Nel menu Visualizza fare clic su Origine HTML per aggiungere il controllo DataGrid seguente tra

    e
    Tag:

    <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. Nel menu Visualizza fare clic su Progettazione per tornare alla visualizzazione struttura.

    DataGrid viene visualizzato in WebForm.

  6. Scegliere Codice dal menu Visualizza per visualizzare il codice sottostante il Web Form. Aggiungere il codice seguente al gestore eventi Page_Load:

    Nota Prima di eseguire questo codice, è necessario impostare user ID <username> e password=<strong password> sui valori corretti. Assicurarsi che l'account utente disponga delle autorizzazioni corrette per eseguire questa operazione nel 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
    
    

    NOTA Sostituire SQLServer nel codice con il nome del SQL Server. Se non si dispone dell'accesso a un SQL Server che contiene il database di esempio Northwind, modificare la stringa di connessione per usare il database Northwind di esempio di Microsoft Access 2002:

    provider=microsoft.jet.oledb.4.0; data source=C:\Programmi\Microsoft Office\Office10\Samples\Northwind.mdb

    Se si seleziona questo metodo, modificare il codice di cui sopra per usare lo spazio dei nomi OleDbClient anziché lo spazio dei nomi SqlClient.

  7. Scegliere Aggiungi pagina HTML dal menu Progetto. Assegnare alla pagina il nome Top.htm e quindi fare clic su Apri.

    Top.htm viene visualizzato nella visualizzazione Struttura.

  8. Scegliere Origine HTML dal menu Visualizza. Sostituire il contenuto della finestra di origine HTML con il codice seguente:

    <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. Scegliere Aggiungi pagina HTML dal menu Progetto. Assegnare alla pagina il nome Frameset.htm e quindi fare clic su Apri.

    Frameset.htm viene aperto nella visualizzazione Struttura.

  10. Scegliere Origine HTML dal menu Visualizza. Sostituire il contenuto della finestra di origine HTML con il codice seguente:

    <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. In Esplora soluzioni fare clic con il pulsante destro del mouse su Frameset.htm e quindi scegliere Imposta come pagina iniziale.

  12. Nel menu Compila fare clic su Compila soluzione.

Provalo!

  1. Scegliere Avvia senza debug dal menu Debug per eseguire l'applicazione.

    Dopo l'apertura del set di frame nel Web browser, dataGrid nella cornice inferiore visualizza i dati del database Northwind.

  2. Nell'elenco a discesa fare clic su Automazione e quindi su Vai.

    Il contenuto di DataGrid viene visualizzato all'esterno del browser nella finestra dell'applicazione Microsoft Excel.

  3. Nell'elenco a discesa fare clic su Tipo MIME (In una nuova finestra) e quindi fare clic su Vai.

    Il contenuto di DataGrid viene visualizzato in Excel ospitato in una nuova finestra del Web browser.

    NOTA Se viene visualizzato un prompt per aprire o salvare il file di Excel, fare clic su Apri.

  4. Nell'elenco a discesa fare clic su Tipo MIME (nel frame) e quindi fare clic su Vai.

    Il contenuto di DataGrid viene visualizzato nella cornice inferiore del set di frame in Excel ospitato nel Web browser.

    NOTA Se viene visualizzato un prompt per aprire o salvare il file di Excel, fare clic su Apri.

Riferimenti

Per altre informazioni, vedere l'articolo della Microsoft Knowledge Base:

296717 PRB: Internet Explorer richiede all'utente di aprire/salvare file di Office trasmessi da ASP