本文主要是介绍C# winform操作CSV格式文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《C#winform操作CSV格式文件》这篇文章主要为大家详细介绍了C#在winform中的表格操作CSV格式文件的相关实例,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下...
实例一
实例效果
当在winform界面中点击读取按钮时 将csv中的所有数据读取出来放置在datagridview控件,可以在datagridview控件中编辑数据,当点击保存按钮时 将datagridview控件中的所有数据存储在csv格式文件中。
实现代码
第一步UI界面搭建
第二步封装一个csv文件格式的操作类
public class CSVAPI { /// <summary> /// 保存 /// </summary> /// <param name="date"></param> /// <param name="data"></param> /// <param name="result"></param> /// <param name="fileName"></param> public void SaveData(string date,string data, string result,string fileName) { using (StreamWriter sw2 = new StreamWriter(fileName, true, Encoding.Default)) { StringBuilder sb = new StringBuilder(); sb.Append(date).Append(",").Append(data).Append(",").Append(result + "\n"); sw2.Write(sb.ToString()); } } /// <summary> /// 读取CSV /// </summary> /// <returns></returns> public string ReadData(string fileName) { StreamReader sr = new StreamReader(fileName, Encoding.Default); string s = sr.ReadToEnd(); // 读取数据 sr.Close(); sr.Dispose(); return s; } }
第三步实现按钮事件
public partial class Form1 : Form { public Form1() { InitializeComponent(); } CSVAPI csv = new CSVAPI(); string filename = "./data.csv"; /// <summary> /// 保存 /// </summary> /// &lphpt;param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { if (dataGridView1.Rows.Count>0) { // 写入表头(将表头写死) FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write); StreamWriter sw = new StreamWriter(fs, Encoding.Default); StringBuilder sb = new StringBuilder(); // 定义可变字符串,保存存储的数据 sb.Append("时间").Append(",").Append("姓名").Append(",").Append("事件"); sw.WriteLine(sb); sw.Close(); sw.Dispose(); fs.Close(); fs.Dispose(); for (int i = 0; i < this.dataGridView1.RowCount-1; i++) { csv.SaveData(this.dataGridView1.Rows[i].Cells[0].Value.ToString()+"", this.dataGridView1.Rows[i].Cells[1].Value.ToString() + "", this.dataGridView1.Rows[i].vHkKFouGCells[2].Value.ToString() + "", filename); } } } /// <summary> /// 读取 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { this.dataGridView1.Rows.Clear(); if (!File.Exists(filename)) { MessageBox.Show("文件不存在"); return; } string[] strings = csv.ReadData(filename).Split('\n'); for (int i = 1;i < strings.Length;i++) { if (!string.IsNullOrEmpty(strings[i])) { string[] vals = strings[i].Split(','); this.dataGridView1.Rows.Add(vals); } } } }
效果展示
实例二
实例效果
当在winform界面中点击读取按钮时弹出文件选择框,用户选择指定的csv文件然后将csv中的所有数据读取出来放置在datagridview控件,可以在datagridview控件中编辑数据,当点击保存按钮时 将datagridview控件中的所有数据存储在用户选择的csv格式文件路径中。
完整代码
public partial class Form1 : Form { public Form1() { InitializeComponent(); } OpenFileDialog ofd = new OpenFileDialog(); //读取 private void button1_Click(object sender, EventArgs e) { //字符串-->dataTable--->dataSource if(ofd.ShowDialog()==DialogResult.OK) { FileStream fs = new FileStream(ofd.FileName, FileMode.Open); StreamReader sr = new StreamReader(fs,Encoding.Default);//读取文件流数据 string data = "";//读出每一行的数据 "name ,age sex" string[] lines;// 数据的数组 bool isHead = true; // 是否是表头 DataTable dt = new DataTable();// 为了给datagridview设置数据源的类型 while ((data=sr.ReadLine())!=null) //先赋值给data 再判断data是否为空 ,不为空时候 一直读取 { lines= data.Split(','); //把每一行的数据使用逗号分隔 [name ,age ,sex] if(isHead) //是不是表头[name ,age ,sex] { //遍历表头数组 给每一列添加标题 for(int i = 0; i < lines.Length; i++) { dt.Columns.Add(lines[i]); //设置dt的列的数据源 } isHead = false; } else /js/不是表头数据,每一行表格添加数据 { DataRow d1 = dt.NewRow();// 指定datataphpble创建行 for (int i = 0; i < lines.Length; i++) { d1[i] = lines[i];// 单元格设置值 } dt.Rows.Add(d1); } } //绑定数据源 if (dt.Rows.Count==0) //如果没行的 证明没数据 { MessageBox.Show("没有数据","温馨提示"); } else { //证明有数据 展示到控件上 //dataGridView1.DataSource = dt; // dataGridView1.ColumnCount 列的个数 dataGridView1.ColumnCount = dt.Columns.Count; //设置表头 for (int i = 0; i < dt.Columns.Count; i++) { // dataGridView1.Columns[i].HeaderText 表格控件的每一列的标题 dataGridView1.Columns[i].HeaderText = dt.Columns[i].ColumnName; } //设置行数据 for (int i = 0; i < dt.Rows.Count; i++) { //dataGridView1.Rows. 设置表格控件的所有的行 dataGridView1.Rows.Add(dt.Rows[i].ItemArray); } } sr.Close(); fs.Close(); } } // 保存 private void button2_Click(object sender, EventArgs e) { //dataSource-->dataTable--->string DataTable dt = new DataTable(); //创建dataTable类型 //设置dt表头 //遍历控件列的个数,根据控件的列的个数设置dt列 for (int i = 0;i < dataGridView1.Columns.Count;i++) { dt.Columns.Add(dataGridView1.Columns[i].HeaderText); //把控件列标题添加到dt列里面 } //设置dt的行 for (int i = 0; i < dataGridView1.Rows.Count; i++) //遍历控件几行 { DataRow row = dt.NewRow(); //创建行 for (int j = 0; j < dataGridView1.Columns.Count; j++) //遍历控件几列 { //dataGridView1[0,0] 根据几行几列取出表格数据 row[j] = dataGridVpythoniew1[j, i].Value; } dt.Rows.Add(row); } //把dt数据转成字符串进行写入 SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "csv文件(*.csv)|.csv"; if(sfd.ShowDialog()==DialogResult.OK) { //开始写入 FileStream fs = new FileStream(sfd.FileName, FileMode.Create); StreamWriter sw = new StreamWriter(fs,Encoding.Default); string data = "";// 写入的字符串 //表头转成字符串 for (int i = 0; i < dt.Columns.Count; i++) { data += dt.Columns[i].ColumnName;// 把dt列标题取出拼接 if(i <dt.Columns.Count-1) { data += ","; // 列之间使用逗号隔开 } } sw.WriteLine(data); //写入表头 //写入行数据 data = null;//防止表头数据重复写入 for (int i = 0; i < dt.Rows.Count-1; i++) { for (int j = 0; j <dt.Columns.Count; j++) { data += dt.Rows[i][j]; //几行几列数据拼接data if(j<dt.Columns.Count-1)//不是最后一列 { data += ","; } } sw.WriteLine(data);//写入表数据 data=null; } sw.Close(); fs.Close(); } } }
1 datagridview 控件的常用属性
- dataGridView1.Columns 表格控件的所有列
- dataGridView1.Columns .Count 表格控件的所有列的个数
- dataGridView1.Rows 表格控件的所有行
- dataGridView1[0,0] 根据几行几列取出表格数据
- dataGridView1.Columns[i].HeaderTex 表格控件的列的文本内容
2 dataTable常用的属性和方法
- DataTable dt = new DataTable(); 创建dataTable类型
- DataRow row = dt.NewRow(); 创建一行
- dt.Rows.Add(row); 向dataTable添加一行
- dt.Columns.Add(); 向dataTable添加一列
- dt.Columns datatable所有的列
- dt.Rows datatable所有的行
- dt.Columns[i].ColumnName;列标题
以上就是C# winform操作CSV格式文件的详细内容,更多关于C#操作CSV的资料请关注China编程(www.chinasem.cn)其它相关文章!
这篇关于C# winform操作CSV格式文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!