迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

在 C# 中将 DataTable 转换为 CSV

作者:迹忆客 最近更新:2024/01/16 浏览次数:

本文将引导你使用 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() 中创建一个名为 dtDataTable 对象。

    DataTable dt = new DataTable();
    
  • 初始化对象后,下一步是将数据列添加到 DataTable dt。我们已经包含了 RollnumFirstnameLastnameSubject 字段,你可以自由添加你需要的任何其他区域。

    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 的新方法。变量 dtpath 是它采用的参数。

    public static class implementCSV {
      public static void ConvertTocsv(this DataTable dt, string path) {}
    }
    
  • ConvertTocsv 方法中,我们创建了一个名为 sStreamWriter 对象,它将在指定路径中写入数据。

    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 循环,它将使用逗号从 DataTable dt 写入数据。

    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;
}

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 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# 程序中的运行时错误或预期不会发生或违反系统/应用程序约束的条件的信息。在本教程中,你将学习与无效参

C# 中的异常列表

发布时间:2024/01/20 浏览次数:128 分类:编程语言

我们将查看本文中可能引发的 C# 异常。System Exception 类是 C# 编程语言中预定义的异常类,可用于编程。选择代码中可能出现的异常并将其插入到适当的 catch 块中。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便