我正在尝试将数据从DataGrid导出到.csv文件(甚至是.xlsx或.xls文件),而且似乎找不到适合我的环境(VB.net)的方法。我在网上看到的所有内容似乎都引用了DataGridView,而不仅仅是普通的DataGrid。这样,否则它将使用C#代码而不是VB。不确定是否会有所作为,但我将Oracle用作数据库。
对于设置,我在页面上有一个按钮,单击该按钮时,我希望后面的代码将基于DataGrid创建一个.csv文件。不过,问题是我希望它提示用户保存文件,而不是仅将其专门保存在某个地方。现在,这是我的按钮代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim rpt_fy As String = Session("RPTFY")
Dim strWHERE As String = " WHERE (FY LIKE '" & rpt_fy & "')"
Dim strSELECT As String = "SELECT FY, BUDGET, CODE, DEPT, REV FROM DB_PROD"
OracleSelectCommand1.CommandText = strSELECT & strWHERE
Dim myDataReader As Data.Odbc.OdbcDataReader
OracleConnection1.Open()
myDataReader = OracleSelectCommand1.ExecuteReader
' Specify the DataReader as the source of the data for our DataGrid
' and then DataBind to display the data in our DataGrid.
Dim dsConvert As New DataSet()
dsConvert.Tables.Add("Convert")
dsConvert.Tables(0).Load(myDataReader)
DataGrid1.DataSource = dsConvert
DataGrid1.DataBind()
' Close our DataReader and Connection
myDataReader.Close()
OracleConnection1.Close()
End Sub
对于文件,我的方法是使用Response.Write()函数为用户提供选择文件保存位置的选项:
Response.Clear()
Response.Buffer = True
Response.AddHeader("content-disposition", "attachment;filename=DataTable.csv")
Response.Charset = ""
Response.ContentType = "application/vnd.ms-excel"
我似乎看到很多东西是使用HtmlTextWriter编写它的想法,就像这样:
Dim stringWrite As New System.IO.StringWriter
Dim htmlWrite As New System.Web.UI.HtmlTextWriter(stringWrite)
Dim strStyle As String = "<style>.text { mso-number-format:\@; } </style>"
For intTemp As Integer = 0 To DataGrid1.Items.Count - 1
DataGrid1.Items(intTemp).Cells(0).Attributes.Add("class", "text")
DataGrid1.Items(intTemp).Cells(1).Attributes.Add("class", "text")
DataGrid1.Items(intTemp).Cells(3).Attributes.Add("class", "text")
Next
DataGrid1.RenderControl(htmlWrite)
response.Write(strStyle & stringWrite.ToString)
response.End()
这个问题是,它实际上只是写一个html文件。我确实意识到Excel应该能够将.html文件转换为.xlsx / .xls文件,但是该程序附带的安全设置不再使这成为可能。因此,我宁愿将其写为.csv而不是html文件。
我还看到了一些使用IO.StreamWriter的示例,但是有了这个,我们将不得不首先将文件保存到服务器,由于安全设置,我们又不能这样做。
如何修改代码以允许从DataGrid导出到.csv文件?
答案 0 :(得分:0)
这是csv表的现有解决方案。您可以从DataSet对象中获取表。
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Linq
Imports System.Collections
Imports System.Collections.Generic
For Each tbl As System.Data.Table In dsConvert.Tables
Dim sb As System.Text.StringBuilder
Dim colNames = tbl.Columns.IEnumerable(Of DataColumn).Select(c >= c.ColumnName)
sb.Append(String.Join(",", columnNames))
For Each row As System.Data.DataRow In tbl.Rows
Dim iEnumFields = row.ItemArray.Select(f >= f.ToString())
sb.AppendLine(String.Join(",", iEnumFields))
Next
File.WriteAllText(tbl.TableName & ".csv", sb.ToString())
Next