Ваш код просто генерирует Html-таблицу (это то, к чему ASP.Net выводит GridView / DataGrid) и ничего больше.Excel может справиться с этим и отобразить его как таблицу, но на самом деле это не файл xls
- или csv
.
Свойство DataSource объекта GridView всегда равно нулю / ничего после обратной передачи.Вы должны сгенерировать источник данных еще раз, прежде чем экспортировать его в Excel.
Этот код преобразует любые данные в строку csv:
C #
public static string tableToCsv(DataTable DT)
{
System.Text.StringBuilder csv = new System.Text.StringBuilder();
System.Text.StringBuilder rowData = new System.Text.StringBuilder();
DataRow DR = null;
DataColumn DC = null;
foreach (DataColumn DC_loopVariable in DT.Columns) {
DC = DC_loopVariable;
rowData.Length = 0;
rowData.Append((rowData.Length > 0 ? ";" : "").ToString());
rowData.Append(DC.ColumnName);
}
csv.Append(rowData.ToString()).Append(Strings.Chr(13));
foreach (DataRow DR_loopVariable in DT.Rows) {
DR = DR_loopVariable;
rowData.Length = 0;
foreach (DataColumn DC_loopVariable in DT.Columns) {
DC = DC_loopVariable;
rowData.Append((rowData.Length > 0 ? ";" : "").ToString());
rowData.Append(DR[DC.ColumnName].ToString());
}
csv.Append(rowData.ToString()).Append(Strings.Chr(13));
}
return csv.ToString();
}
VB
Public Shared Function tableToCsv(ByVal DT As DataTable) As String
Dim csv As New System.Text.StringBuilder
Dim rowData As New System.Text.StringBuilder
Dim DR As DataRow
Dim DC As DataColumn
For Each DC In DT.Columns
rowData.Length = 0
rowData.Append(IIf(rowData.Length > 0, ";", "").ToString)
rowData.Append(DC.ColumnName)
Next
csv.Append(rowData.ToString).Append(Chr(13))
For Each DR In DT.Rows
rowData.Length = 0
For Each DC In DT.Columns
rowData.Append(IIf(rowData.Length > 0, ";", "").ToString)
rowData.Append(DR.Item(DC.ColumnName).ToString)
Next
csv.Append(rowData.ToString).Append(Chr(13))
Next
Return csv.ToString
End Function