C#读目录里面所有CSV文件数据表,显示到DataGridView

36 篇文章 0 订阅
32 篇文章 0 订阅

目的

读取CSV文件,包含题头的数据表格,显示到WinForm。 使用了锐视SeeSharp工具包。

CSV读取

一开始打算自己干写,觉得这个链接文章有用:
https://www.cnblogs.com/lcidy/p/9700187.html

后来看了简仪SeeSharp Tools的范例,问了LJY,有我需要的API,就成了这样:

//引用段
using SeeSharpTools.JY.File;
...
//方法定义变量
string[,] data= null;

//方法里面的调用
data= CsvHandler.Read<string>(文件路径名,(long) 0,0,-1,-1,Encoding.UTF8);
//CsvHandler.Read有多个数据类型和调用定义的重载,可根据需要自取; 我用了编码定义, 避免中文乱码

DataGridView

较完整参考:
https://blog.csdn.net/angel20082008/article/details/51718676

我的任务比较简单:

//读入栏头,用循环加入列:
dataGridViewWavSpec.Columns.Add()
//or 你知道要多少列
dataGridViewIDResults.ColumnCount = 要几列写多少;
//*********************
//加完头,逐行加内容:
dataGridViewWavSpec.Rows.Add();
//写个循环,变量k,逐个加这行的各列内容:
dataGridViewWavSpec.Rows[行号].Cells[k].Value = 表格数据

遍历目录

详细参考,一个递归算法
https://www.cnblogs.com/fuqiang88/p/7866458.html

我简单, 就读取一个目录里面所有的csv,可以:

//引用
using System.IO;
//正文代码
            DirectoryInfo fdir = new DirectoryInfo(_pathOfSpecs);
            FileInfo[] files = fdir.GetFiles("*.csv");

在一个WinForm弹出另一个WinForm

https://www.cnblogs.com/tommy-huang/p/4539999.html

    Form1 form1 = new Form1();
    form1.Show(); //并行运行
    //或者
    form1.ShowDialog(); //阻塞运行, 退出form1才能继续

检查文件是否存在

if (File.Exists("full file name"))

选择文件夹FolderBrowserDialog

本来想用OpenFileDialog去掉文件选择检查就可以, 但是发现必须填写一个文件名,让用户迷惑。 用了FolderBrowserDialog, 但是看不到桌面shortcut了,不爽。 检查了一些论坛, 最后发现, 微软就是推荐这个不方便的FolderBrowserDialog。
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.openfiledialog?view=netframework-4.7.2

            FolderBrowserDialog dialog = new FolderBrowserDialog();
            dialog.Description = "请选择你需要的文件夹";
            if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                //在这里干活
            }

还要写个进度条

后台计算的时候界面线程是锁死的,直接写控件属性不行,得用跨线程调用技术。 详细:
https://www.cnblogs.com/TankXiao/p/3348292.html#delegateinvoke

推荐比较标准的BackgroundWorker,如果简单使用的话推荐第二种办法(delegate Invoke)

我看不懂,请教简仪LJW,得到一行金代码:

//前面要显示进度条
progressBar.Visible = true;
//进入循环,金光代码:
Invoke(new Action(() => { progressBar.Value = 100 * i / (循环长度 - 1); }));
//出了循环隐藏进度条,不然进度条有动画呼吸效果,太扎眼
progressBar.Visible = false;

实际上这个写法就是前面链接帖子的方法2,只是更容易看。

加餐backgroundWorker

软件里面连续处理一堆数据文件,导致GUI锁死,采用backgroundWorker解决:
背景知识:
https://www.cnblogs.com/sparkdev/p/5906272.html
补充,关闭窗体时如果backgroundWorker在跑,要拦截事件:
https://stackoverflow.com/questions/1731384/how-to-stop-backgroundworker-on-forms-closing-event
主要工作:

  1. 将主体处理循环方法设为backgroudWorker
    . Form里面放一个backgroundWorker
    . 设定其Name,打开Asynchronous 里面 WorkerReportsProgress和WorkerSupportsCancellation为True
    . 通过双击建立DoWork、ProgressChanged、RunWorkerCompleted事件
  2. DoWork里面是数据处理
  3. ProgressChanged里面显示进度(进度条和状态显示)
  4. RunWorkerCompleted里面影藏进度条和抓住异常
  5. 处理按钮事件触发后台运行控件
    . 点击处理事件使能进度条,清空报表dataGridView
    . 启动
backgroundWorker1.RunWorkerAsync();
  1. backgroundWorker工作时屏蔽FormClosing
  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 您可以使用以下代码将CSV文件的内容取到DataGridView中: ```csharp using System.Data; using System.IO; using System.Windows.Forms; // 选择CSV文件 OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "CSV files (*.csv)|*.csv"; if (openFileDialog.ShowDialog() == DialogResult.OK) { // CSV文件 DataTable dataTable = new DataTable(); using (StreamReader reader = new StreamReader(openFileDialog.FileName)) { string[] headers = reader.ReadLine().Split(','); foreach (string header in headers) { dataTable.Columns.Add(header); } while (!reader.EndOfStream) { string[] rows = reader.ReadLine().Split(','); DataRow dataRow = dataTable.NewRow(); for (int i = 0; i < headers.Length; i++) { dataRow[i] = rows[i]; } dataTable.Rows.Add(dataRow); } } // 将CSV文件内容显示DataGridViewdataGridView.DataSource = dataTable; } ``` 这段代码会打开一个文件对话框,让用户选择CSV文件。然后,它会将CSV文件的内容取到一个DataTable对象中。最后,将DataTable对象的内容显示DataGridView中。 ### 回答2: 首先,要csv文件dataGridView,我们需要使用C#编程语言中的相关库和方法。 首先,我们需要引用System.IO和System.Windows.Forms两个命名空间,因为我们要使用StreamReader类和DataGridView类。在代码的开头,加入以下语句: ```csharp using System.IO; using System.Windows.Forms; ``` 接下来,我们需要创建一个方法来csv文件。我们可以定义一个名为ReadCSV的方法,并将dataGridView作为参数传递进去。在方法内部,我们可以使用OpenFileDialog类来选择要取的csv文件,然后使用StreamReader类来文件的内容。 ```csharp public void ReadCSV(DataGridView dataGridView) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "CSV文件|*.csv"; if (openFileDialog.ShowDialog() == DialogResult.OK) { using (StreamReader reader = new StreamReader(openFileDialog.FileName)) { string line; while ((line = reader.ReadLine()) != null) { string[] row = line.Split(','); dataGridView.Rows.Add(row); } } } } ``` 在上面的代码中,我们打开一个文件对话框来选择csv文件。然后,我们使用StreamReader逐行文件的内容,并使用Split()方法将每一行的文本拆分成一个字符串数组。最后,我们将数组中的数据添加到dataGridView的行中。 通过在你的主程序中调用这个ReadCSV方法,你就可以csv文件并将数据显示dataGridView中了。 ```csharp ReadCSV(dataGridView1); ``` 以上就是使用C#编程语言将csv文件取到dataGridView的简单步骤。希望对你有所帮助! ### 回答3: csv文件dataGridView的步骤如下: 1. 首先,我们需要创建一个新的Windows窗体应用程序,并在设计视图中添加一个DataGridView控件,用于显示csv文件的数据。 2. 接下来,我们需要在代码中添加csv文件的功能。可以使用C#中的StreamReader类来文件,并逐行解析文件内容。 3. 打开csv文件,并按行文件内容。可以使用StreamReader的ReadLine()方法来逐行文件。 4. 将取的每一行数据按照csv文件的分隔符进行分割。一般来说,csv文件使用逗号作为分隔符,可以使用String的Split()方法来实现字符串的分割。 5. 将分割后的数据添加到一个二维数组中,用于存储csv文件的数据。 6. 将二维数组中的数据绑定到DataGridView控件,以便在窗体上显示csv文件的内容。 7. 最后,关闭csv文件取流,并释放相应的资源。 下面是一个示例代码: ```csharp using System; using System.IO; using System.Windows.Forms; namespace CSVReader { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string filePath = "example.csv"; // csv文件路径 char delimiter = ','; // csv文件分隔符 if (File.Exists(filePath)) { string[] lines = File.ReadAllLines(filePath); // 取整个csv文件内容 string[][] data = new string[lines.Length][]; // 创建二维数组来存储csv文件数据 for (int i = 0; i < lines.Length; i++) { data[i] = lines[i].Split(delimiter); // 将每一行数据按照分隔符进行分割 } foreach (var row in data) { dataGridView.Rows.Add(row); // 将数据添加到dataGridView控件中 } } else { MessageBox.Show("文件不存在!"); } } } } ``` 通过以上步骤,我们可以将csv文件的数据取并显示dataGridView控件中,方便用户查看和编辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值