Я пытаюсь экспортировать данные из DataGrid в файл .csv (или даже в файл .xlsx или .xls) и, похоже, не могу найти подход, который работает для моей среды (VB.net).Почти все, что я видел в Интернете, похоже, ссылается на DataGridView, а не просто на DataGrid.Это, или он будет использовать код C #, а не VB.Не уверен, что это что-то меняет, но я использую Oracle в качестве базы данных.
Для настройки у меня есть кнопка на моей странице, которая, при нажатии, я надеюсь, что код позади создаст .csvфайл на основе DataGrid.Проблема, однако, заключается в том, что я хочу, чтобы он предлагал пользователю сохранить файл, а не просто сохранять его где-то конкретно.На данный момент это код, который у меня есть для моей кнопки:
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 (), чтобы дать пользователю возможность выбрать, где сохранитьfile:
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?