导出Gridview连接到MYSQL数据以获得优秀

时间:2014-06-10 09:42:36

标签: mysql asp.net vb.net

我有一个在Visual Studio(VB)中创建的简单表单,它有一个数据网格视图连接到MySQL中的表(托管在远程服务器中)。

我有以下代码将网格视图导出到Excel,但导出需要很长时间(大约15分钟)。

MySQL中的表格很小(1000行和60列)。

有没有更好的方法将完整的MySQL表导出为ex​​cel?

请帮助

CODE:

 Dim xlApp As Microsoft.Office.Interop.Excel.Application
        Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook
        Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
        Dim misValue As Object = System.Reflection.Missing.Value
        Dim i As Integer
        Dim j As Integer


        xlApp = New Microsoft.Office.Interop.Excel.Application
        xlWorkBook = xlApp.Workbooks.Add(misValue)
        xlWorkSheet = xlWorkBook.Sheets("sheet1")
        For i = 0 To DataGridView1.Rows.Count - 1
            For j = 0 To DataGridView1.Columns.Count - 1
                For k As Integer = 1 To DataGridView1.Columns.Count
                    On Error Resume Next
                    xlWorkSheet.Cells(1, k) = DataGridView1.Columns(k - 1).HeaderText
                    xlWorkSheet.Cells(i + 2, j + 1) = DataGridView1(j, i).Value.ToString()
                Next
            Next
        Next
        xlWorkSheet.SaveAs("C:\Users\USERNAME\Desktop\vbexcel.xlsx")
        xlWorkBook.Close()

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点:

  1. 使用rdlc报告。
  2. 使用gridview导出。
  3. 首先需要创建rdlc报告,然后将数据检索到datatable中,然后调用此代码:

    Dim MyDataSource As ReportDataSource = New ReportDataSource("ReportDataSet", MyDataTable)
            reportviewer1.LocalReport.ReportPath = Server.MapPath("MyrdlcReportPath")
            rvSmartCardsIssues.LocalReport.EnableExternalImages = True
            rvSmartCardsIssues.LocalReport.DataSources.Clear()
            rvSmartCardsIssues.LocalReport.DataSources.Add(MyDataSource )
            rvSmartCardsIssues.LocalReport.Refresh()
    
            Dim warnings As Warning() = Nothing
            Dim streamids As String() = Nothing
            Dim mimeType As String = Nothing
            Dim encoding As String = Nothing
            Dim extension As String = Nothing
            Dim bytes As Byte()
            bytes = rvSmartCardsIssues.LocalReport.Render("Excel", Nothing, mimeType, encoding, extension, streamids, warnings)
            HttpContext.Current.Response.Buffer = True
            HttpContext.Current.Response.Clear()
            HttpContext.Current.Response.ContentType = mimeType
            HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=ExportedFileName.xls")
            HttpContext.Current.Response.BinaryWrite(bytes)
            HttpContext.Current.Response.Flush()
            HttpContext.Current.Response.End()
    

    基于此功能的第二种方式:

    Public Shared Sub ExportGridViewToExcelGridView(ByVal Filename As String, ByRef gvr As GridView, ByRef currentPage As Page)
    
        Dim HtmlForm As System.Web.UI.HtmlControls.HtmlForm = New System.Web.UI.HtmlControls.HtmlForm()
        currentPage.Controls.Add(HtmlForm)
        HtmlForm.Controls.Add(gvr)
    
        currentPage.Response.Clear()
        currentPage.Response.Buffer = True
        currentPage.Response.AddHeader("Content-Disposition", "attachment; filename=" & Filename)
        currentPage.Response.ContentType = "application/vnd.ms-excel"
        currentPage.Response.ContentEncoding = System.Text.Encoding.UTF8
        currentPage.Response.Charset = ""
        currentPage.EnableViewState = False
        Using strwriter As New StringWriter
            Dim htmlwrt As HtmlTextWriter = New HtmlTextWriter(strwriter)
            HtmlForm.RenderControl(htmlwrt)
            htmlwrt.Flush()
            currentPage.Response.Write(strwriter.ToString)
            currentPage.Response.End()
        End Using
    End Sub
    

    确保在使用第二种方式将gridview分页属性设置为false时。