2011-06-07 103 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

相关问题