2013-05-14 6 views
0

Я использую метод, который принимает данные и преобразует его в CSV. Проблема в том, что (1), когда я пытаюсь вызвать этот метод, последующие процессы/команды никогда не будут выполнены. Также (2) содержимое окна списка из вызывающей формы было очищено после вызова этого метода. Может ли кто-нибудь помочь мне в этом? Я включил метод ниже для справки.C# Экспорт в CSV-проблемы

public void DataTableToCSV(string fileName, DataTable dt) 
{ 
    Response.Clear(); 
    Response.AddHeader("content-disposition", string.Format("attachment;filename={0}.csv", fileName + DateTime.Now.ToString().Replace(" ", "").Replace(":", "").Replace(" ", "").Replace("/", ""))); 
    Response.Charset = ""; 
    Response.ContentType = "application/vnd.csv"; 
    System.IO.StringWriter sWriter; 
    System.Text.StringBuilder sb = new System.Text.StringBuilder(); 

    sWriter = new System.IO.StringWriter(sb); 
    string Str; 
    for (int k = 0; k <= (dt.Columns.Count - 1); k++) 
    { 
     sWriter.Write(dt.Columns[k].ColumnName + ","); 
    } 

    sWriter.WriteLine(","); 
    for (int i = 0; i <= (dt.Rows.Count - 1); i++) 
    { 
     for (int j = 0; j <= (dt.Columns.Count - 1); j++) 
     { 
      Str = (dt.Rows[i][j].ToString().Replace(",", "")); 
      if (Str == "&nbsp;") 
       Str = ""; 

      Str = (Str + ","); 
      sWriter.Write(Str); 
     } 
     sWriter.WriteLine(); 
    } 
    sWriter.Close(); 
    Response.Write(sb.ToString()); 
    Response.End(); 
} 
+0

Как вы называете этот метод? использовать ajax-вызов? –

+0

Я полагаю, что это Web-страница Asp.Net? – Fendy

+0

[Вам это может быть полезно!] (Http://secretgeek.net/csv_trouble.asp) – JMK

ответ

1

Что касается (1) - Response.End() бросает ThreadAbortException внутренне, который в основном завершает нормальную страницу жизненного цикла и «прыгает вперед» на EndRequest события. Так что ничего сразу после вызова DataTableToCSV() не будет вызываться.

Надеется, что это помогает ..

0

Создайте вторую страницу, которая возвращает CSV. Поместите тег обновления Meta в начало страницы, которая перенаправляется на эту страницу. Поскольку ответ - это файл, вы никогда не будете перенаправлены, но появится диалог сохранения файла.