2011-06-07 84 views

回答

4

導出到XML是內置的,但導出爲CSV文件,可以使用下面的代碼 - 從http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/d2071fd4-8c7d-4d0e-94c3-9586df754df8/

這個只寫數據,而不是列,您需要先循環列標題。

編輯:更新爲包含列名稱...我沒有運行此操作,並且這是來自上面鏈接的編輯,所以它可能會或可能不會工作,但這裏的概念是

StringBuilder str = new StringBuilder(); 
    // get the column headers 
foreach (var c in NorthwindDataSet.Customers.Columns) { 
    str.Append("\"" + c.ColumnName.ToString() + "\"\t"); 
} 
str.Append("\r\n"); 

    // write the data here 
foreach (DataRow dr in this.NorthwindDataSet.Customers) { 
foreach (var field in dr.ItemArray) { 
    str.Append("\"" + field.ToString() + "\"\t"); 
} 
str.Append("\r\n"); 
} 
try { 
My.Computer.FileSystem.WriteAllText("C:\\temp\\testcsv.csv", str.ToString(), false); 
} catch (Exception ex) { 
MessageBox.Show("Write Error"); 
} 
+0

@Alex,我編輯的原代碼,這是逗號分隔,並將其轉化爲現在分開了標籤。現在它不包含標題。很容易得到..我現在編輯它 – 2011-06-07 02:33:05

+0

此外,將有多餘的尾隨選項卡。 – 2011-06-07 02:34:35

+0

@Alex,如果OP希望刪除尾部標籤非常容易,但是在這種情況下,每個數據都用引號包裹,尾部標籤將被CSV閱讀器忽略 – 2011-06-07 02:40:26

4
private static string GetTextFromDataTable(DataTable dataTable) 
{ 
    var stringBuilder = new StringBuilder(); 
    stringBuilder.AppendLine(string.Join("\t", dataTable.Columns.Cast<DataColumn>().Select(arg => arg.ColumnName))); 
    foreach (DataRow dataRow in dataTable.Rows) 
     stringBuilder.AppendLine(string.Join("\t", dataRow.ItemArray.Select(arg => arg.ToString()))); 
    return stringBuilder.ToString(); 
} 

用法:

var text = GetTextFromDataTable(dataSet.Tables[0]); 
File.WriteAllText(filePath, text); 
+0

您的功能運行良好 – 2011-06-07 02:41:40

+0

我認爲,Sel不想循環行,並尋找更好的解決方案! – DeveloperX 2011-06-07 04:18:06

0

注意,你將需要使用LINQ此解決方案的工作。下面using語句添加到代碼:

using System.Linq; 
+0

我認爲這是爲了評論Alex Aza的回答 – StuartQ 2015-08-17 09:35:33

相關問題