Как я могу экспортировать в CSV или Excel файл с помощью DataGrid (НЕ DataGridView) в ASP.NET с использованием VB? - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь экспортировать данные из 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?

1 Ответ

0 голосов
/ 04 февраля 2019

Вот существующее решение для таблицы в CSV.Вы можете получить свою таблицу из объекта DataSet.

c # с датой csv

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...