在 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
对象。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 类型的表。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 中的数据。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;
}
相关文章
在 C# 中获取组合框的选定值
发布时间:2024/01/20 浏览次数:151 分类:编程语言
-
本教程展示了如何在 C# 中获取 ComboBox 的选定值。在本教程中,你将学习在 C# 中获取 ComboBox 的选定文本和值的不同方法。获取 ComboBox 控件的选定值的最常用方法是使用 C# 在按钮单击事件中获取
在 C# 中创建一个 UDP 服务器
发布时间:2024/01/20 浏览次数:158 分类:编程语言
-
在本文中,我们将学习如何在 C# 中创建 UDP 服务器。本文将展示如何在 C# 中创建一个简单的 UDP 服务器。在 C# 中创建一个 UDP 服务器
C# 中的 LINQ 分组
发布时间:2024/01/20 浏览次数:51 分类:编程语言
-
LINQ 中的 group by 用于按 C# 中的某个公共值对对象序列进行分组 C# 中的 LINQ 分组 LINQ 将类似 SQL 的查询功能与 C# 中的数据结构集成在一起。
使用 C# 在 LINQ 查询中按多列分组
发布时间:2024/01/20 浏览次数:167 分类:编程语言
-
这是一篇关于 LINQ 查询的使用以及我们如何使用 LINQ 查询按列分组的文章。本文简要介绍了使用 C# 进行的 LINQ 查询。此外,它还讨论了如何使用 LINQ 查询按多列对结果进行分组。
在 C# 中捕获多个异常
发布时间:2024/01/20 浏览次数:135 分类:编程语言
-
有两种主要方法可用于捕获 C# 中的多个异常,即 Exception 类和 catch 子句中的 if 语句。使用 C# 中的 Exception 类捕获多个异常 Exception 类用于表示 C# 中的一般异常。
C# 中为无效参数或参数引发的异常类型
发布时间:2024/01/20 浏览次数:71 分类:编程语言
-
本教程将教你如何在 C# 中为无效参数或参数抛出不同类型的异常。异常提供有关 C# 程序中的运行时错误或预期不会发生或违反系统/应用程序约束的条件的信息。在本教程中,你将学习与无效参