在 C# 中将 DataTable 转换为 CSV
本文将引导你使用 C# 将 DataTable 转换为 CSV 文件。首先,我们必须知道 CSV 是什么,所以让我们开始吧。
逗号拆分值(也称为 CSV 文件)中的数据由逗号而不是空格分隔到各自的列中。CSV 文件的另一个用途是在数据自动放入 Excel 中的相应单元格时立即在 Excel 中打开文件。
在 C# 中将 DataTable 转换为 CSV
将 DataTable 转换为 CSV 文件的第一步是创建 DataTable。以下段落概述了这样做所涉及的步骤。
创建和填充 DataTable
-
首先,我们必须导入以下库:
using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; -
我们创建了一个名为
datacreation的类,其中包含一个名为CreateData()的方法,该方法生成一个 DataTable 作为其返回值。public static class datacreation { public static DataTable CreateData() {} } -
从数据输入开始,我们必须在
CreateData()中创建一个名为dt的DataTable对象。
```c#
DataTable dt = new DataTable();
```
-
初始化对象后,下一步是将数据列添加到 DataTable
dt。我们已经包含了Rollnum、Firstname、Lastname和Subject字段,你可以自由添加你需要的任何其他区域。dt.Columns.Add("RollNum", typeof(int)); dt.Columns.Add("Firstname", typeof(string)); dt.Columns.Add("Lastname", typeof(string)); dt.Columns.Add("Subjects", typeof(string)); -
接下来,在这些列或字段中填写信息。
dt.Rows.Add(3227, "Zeeshan", "Khan", "C#"); dt.Rows.Add(3290, "Bubby", "Zeeshan", "Java"); dt.Rows.Add(3247, "Osama", "shanii", "C++"); dt.Rows.Add(3156, "Haseeb", "Bhatti", "Python"); dt.Rows.Add(3223, "Saad", "Shukhri", "Mongo Db"); dt.Rows.Add(3267, "Sheraz", "Malik", "MySQl"); dt.Rows.Add(3288, "Nabeel", "Sindho", "PHP"); dt.Rows.Add(3299, "Ahsan", "Chishti", "C"); -
CreateData()函数将返回 DataTable 类型的表。
```c#
return dt;
```
在 C# 中将 DataTable 转换为 CSV
创建 DataTable 后,下一步是编写将 DataTable 转换为 CSV 的代码。
-
我们在
implementCSV类中添加了一个名为ConvertTocsv的新方法。变量dt和path是它采用的参数。public static class implementCSV { public static void ConvertTocsv(this DataTable dt, string path) {} } -
在
ConvertTocsv方法中,我们创建了一个名为s的StreamWriter对象,它将在指定路径中写入数据。StreamWriter s = new StreamWriter(path, false); -
我们将使用
for循环通过在每列之间插入逗号来拆分 DataTable 中的数据。
```c#
for (int i = 0; i < dt.Columns.Count; i++) {
s.Write(dt.Columns[i]);
if (i < dt.Columns.Count - 1) {
s.Write(",");
}
}
s.Write(s.NewLine);
```
-
之后,我们现在将使用一个
foreach循环,它将使用逗号从 DataTabledt写入数据。foreach (DataRow dr in dt.Rows) { for (int i = 0; i < dt.Columns.Count; i++) { if (!Convert.IsDBNull(dr[i])) { string value = dr[i].ToString(); if (value.Contains(',')) { value = String.Format("\"{0}\"", value); s.Write(value); } else { s.Write(dr[i].ToString()); } } if (i < dt.Columns.Count - 1) { s.Write(","); } } s.Write(s.NewLine); }
完整的源代码
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DataTableExport {
public static class datacreation {
public static DataTable CreateData() {
DataTable dt = new DataTable();
dt.Columns.Add("RollNum", typeof(int));
dt.Columns.Add("Firstname", typeof(string));
dt.Columns.Add("Lastname", typeof(string));
dt.Columns.Add("Subjects", typeof(string));
dt.Rows.Add(3227, "Zeeshan", "Khan", "C#");
dt.Rows.Add(3290, "Bubby", "Zeeshan", "Java");
dt.Rows.Add(3247, "Osama", "shanii", "C++");
dt.Rows.Add(3156, "Haseeb", "Bhatti", "Python");
dt.Rows.Add(3223, "Saad", "Shukhri", "Mongo Db");
dt.Rows.Add(3267, "Sheraz", "Malik", "MySQl");
dt.Rows.Add(3288, "Nabeel", "Sindho", "PHP");
dt.Rows.Add(3299, "Ahsan", "Chishti", "C");
return dt;
}
}
public static class implementCSV {
public static void ConvertTocsv(this DataTable dt, string path) {
StreamWriter s = new StreamWriter(path, false);
for (int i = 0; i < dt.Columns.Count; i++) {
s.Write(dt.Columns[i]);
if (i < dt.Columns.Count - 1) {
s.Write(",");
}
}
s.Write(s.NewLine);
foreach (DataRow dr in dt.Rows) {
for (int i = 0; i < dt.Columns.Count; i++) {
if (!Convert.IsDBNull(dr[i])) {
string value = dr[i].ToString();
if (value.Contains(',')) {
value = String.Format("\"{0}\"", value);
s.Write(value);
} else {
s.Write(dr[i].ToString());
}
}
if (i < dt.Columns.Count - 1) {
s.Write(",");
}
}
s.Write(s.NewLine);
}
s.Close();
}
}
}
创建 Windows 窗体
在 DataTable 中创建数据并使用逗号分隔后,下一步是构建一个 Windows 窗体,可以在其中显示数据,然后将其转换为 .csv 格式。
-
首先,让我们创建一个 Windows 窗体,如下所示,在其中,我们将放置一个
DataGridView和一个名为Convert data to CSV的按钮。包括显示创建数据的DataGridView和将 DataTable 转换为 CSV 的按钮。
-
执行完 Windows 窗体后,它将如下所示:

为 Windows 窗体编写代码
创建 Windows 窗体后,下一步是编写 将数据转换为 CSV 按钮的代码。
-
通过调用下面列出的方法初始化一个对象并用数据填充它。
DataTable dt = datacreation.CreateData(); -
OpenSavefileDialog()可用于以给定名称保存文件。string filename = OpenSavefileDialog(); -
ConvertTocsv将用于从我们创建的数据创建一个 CSV 文件。dt.ConvertTocsv(filename);
Windows 窗体源代码
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
DataTable dt = datacreation.CreateData();
dataGridView1.DataSource = dt;
}
private void btnCSV_Click(object sender, EventArgs e) {
DataTable dt = datacreation.CreateData();
string filename = OpenSavefileDialog();
dt.ConvertTocsv(filename);
}
private string OpenSavefileDialog() {
string filename = null;
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "csv File|*.csv";
saveFileDialog.Title = "Save";
DialogResult dialogResult = saveFileDialog.ShowDialog();
if (dialogResult == DialogResult.OK) {
filename = saveFileDialog.FileName;
}
return filename;
}
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn