2010-12-08 22 views
1

我從我的功能之一得到一個DataTable返回類型功能的數據表,以逗號分隔值

但是,當我必須在一個多行文本框顯示它的話,我需要的,應該是能夠轉換的功能datatable爲逗號分隔值以顯示在多行文本框中。

任何可以告訴我這樣一個功能,可以滿足我的需要。

+1

告訴我一兩件事:你會多少次問這個問題 – TalentTuner 2010-12-08 13:45:38

回答

0

前一陣子我不得不自己寫一個。我寫我的寫出來到一個流(因爲我將它保存到磁盤,但它應該是微不足道的改變它使用System.Text.StringBuilder(我會用於連接字符串出於性能原因)

public static void ToCsv(Stream stream, DataTable dataTable, bool includeColumnHeaders, char valueDelimiter, char textQualifier, string rowDelimiter) 
    { 
     StreamWriter sw = new StreamWriter(stream); 
     string valueFormatString = (textQualifier + "{0}" + textQualifier).Trim(); 

     if (includeColumnHeaders) 
     { 
      for(int i = 0; i < dataTable.Columns.Count; i++) 
      { 
       sw.Write(String.Format(valueFormatString, dataTable.Columns[i].ColumnName.Replace(textQualifier.ToString(), textQualifier.ToString() + textQualifier.ToString()))); 

       if (i != dataTable.Columns.Count - 1) 
        sw.Write(valueDelimiter); 
      } 

      sw.Write(rowDelimiter); 
     } 

     for(int i = 0; i < dataTable.Rows.Count; i++)    
     { 
      for (int j = 0; j < dataTable.Rows[i].ItemArray.Length; j++) 
      { 
       sw.Write(String.Format(valueFormatString, dataTable.Rows[i][j].ToString().Replace(textQualifier.ToString(), textQualifier.ToString() + textQualifier.ToString()))); 

       if(j != dataTable.Rows[i].ItemArray.Length - 1) 
        sw.Write(valueDelimiter); 
      } 
      sw.Write(rowDelimiter); 
     } 

     sw.Flush(); 
    } 

HTH, 布賴恩