我有一个DataSet。我想将数据集列作为标题和行数据转换为制表符分隔文本文件。
我有什么技巧可以做到最后还是我必须手动循环?
真诚地感谢, - Sel
答案 0 :(得分:5)
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);
答案 1 :(得分:4)
导出到XML内置,但导出为CSV,您可以使用以下代码 - 来自http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/d2071fd4-8c7d-4d0e-94c3-9586df754df8/
这只会写入数据,而不是列,您需要首先循环列标题..
编辑:更新以包含列名...我还没有运行这个,这是上面链接的编辑,所以它可能有效也可能无效,但概念在这里 < / p>
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");
}
答案 2 :(得分:0)
请注意,您需要使用Linq才能使此解决方案正常工作。将以下using
语句添加到您的代码中:
using System.Linq;