Экспорт данных в DataGrid в ASP. Net WebForm — Microsoft Excel

Аннотация

Используйте это пошаговое руководство, чтобы заполнить элемент управления веб-сервера DataGrid на веб-ASP.NET, а затем экспортировать содержимое DataGrid в Microsoft Excel.

Методы

В этой статье описаны два метода экспорта данных в DataGrid:

  • Использование типа MIME Excel (или типа контента)

    С помощью серверного кода можно привязать DataGrid к данным и открыть данные в Excel на клиентском компьютере. Для этого задайте для ContentType значение application/vnd.ms-excel. После получения клиентом нового потока данные отображаются в Excel так, как если бы содержимое было открыто как новая страница в веб-браузере.

  • Использование службы автоматизации Excel

    С помощью клиентского кода можно извлечь HTML-код из DataGrid, а затем автоматизировать Excel для отображения HTML в новой книге. В службе автоматизации Excel данные всегда отображаются за пределами браузера в окне приложения Excel. Одним из преимуществ службы автоматизации является возможность программного управления Excel, если вы хотите изменить книгу после экспорта данных. Однако, так как Excel не помечен как безопасный для создания скриптов, клиенты должны применять параметры безопасности в веб-браузере, которые разрешают автоматизацию.

Пошаговые инструкции

  1. Запустите Visual Studio .NET. В меню Файл выберите пункт Создать и затем пункт Проект.

  2. В области "Типы проектов" щелкните "Проекты Visual Basic". В разделе "Шаблоны" щелкните ASP.NET веб-приложения. Приведите имя приложению ExcelExport и нажмите кнопку "ОК".

    WebForm1 отображается в режиме конструктора.

  3. В Обозреватель решений щелкните правой кнопкой мыши WebForm1.aspx и выберите команду "Переименовать". Измените имя файла на Bottom.aspx.

  4. В меню "Вид" щелкните "Источник HTML", чтобы добавить следующий объект DataGrid между

    и
    Теги:

    <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. В меню "Вид" нажмите кнопку "Конструктор", чтобы вернуться в режим конструктора.

    Объект DataGrid отображается на веб-формате.

  6. В меню "Вид" щелкните "Код", чтобы отобразить код веб-формы. Добавьте следующий код в обработчик Page_Load событий:

    Примечание Перед выполнением <> этого кода необходимо изменить имя пользователя и пароль(<>надежный пароль) на правильные значения. Убедитесь, что учетная запись пользователя имеет правильные разрешения для выполнения этой операции в базе данных.

    ' 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
    
    

    ПРИМЕЧАНИЕ Замените SQLServer в коде именем SQL Server. Если у вас нет доступа к SQL Server, содержащего образец базы данных Northwind, измените строку подключения, чтобы использовать пример базы данных Northwind Microsoft Access 2002:

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

    При выборе этого метода измените упомянутый выше код, чтобы использовать пространство имен OleDbClient, а не пространство имен SqlClient.

  7. В меню "Проект" щелкните "Добавить HTML-страницу". Приведите имя страницы Top.htm нажмите кнопку "Открыть".

    Top.htm в режиме конструктора.

  8. В меню "Вид" выберите htmL-источник. Замените содержимое окна источника HTML следующим кодом:

    <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. В меню "Проект" щелкните "Добавить HTML-страницу". Приведите имя страницы Frameset.htm нажмите кнопку "Открыть".

    Frameset.htm в режиме конструктора.

  10. В меню "Вид" выберите htmL-источник. Замените содержимое окна источника HTML следующим кодом:

    <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. В Обозреватель решений щелкните правой кнопкой мыши Frameset.htm и выберите команду "Задать как пусковую страницу".

  12. On the Build menu, click Build Solution.

Попробуйте!

  1. В меню "Отладка" нажмите кнопку "Пуск без отладки", чтобы запустить приложение.

    После того как набор кадров откроется в веб-браузере, DataGrid в нижнем кадре отобразит данные из базы данных Northwind.

  2. В раскрывающемся списке щелкните "Автоматизация", а затем нажмите кнопку "Перейти".

    Содержимое DataGrid отображается вне браузера в окне приложения Microsoft Excel.

  3. В раскрывающемся списке щелкните MIME Type (In a New Window) (Тип MIME (в новом окне) и нажмите кнопку "Перейти".

    Содержимое DataGrid отображается в Excel, размещенном в новом окне веб-браузера.

    ПРИМЕЧАНИЕ Если появится запрос на открытие или сохранение файла Excel, нажмите кнопку "Открыть".

  4. В раскрывающемся списке щелкните MIME Type (In the Frame) (Тип MIME (в кадре) и нажмите кнопку "Перейти".

    Содержимое DataGrid отображается в нижнем кадре набора кадров в Excel, размещенном в веб-браузере.

    ПРИМЕЧАНИЕ Если появится запрос на открытие или сохранение файла Excel, нажмите кнопку "Открыть".

Ссылки

Дополнительные сведения см. в статье базы знаний Майкрософт:

296717 PRB: Internet Explorer предлагает пользователю открыть или сохранить файл Office в потоковом режиме из ASP