7人参与 • 2025-03-06 • Asp.net
当在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> /// <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].cells[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 //不是表头数据,每一行表格添加数据 { datarow d1 = dt.newrow();// 指定datatable创建行 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] = datagridview1[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 控件的常用属性
2 datatable常用的属性和方法
以上就是c# winform操作csv格式文件的详细内容,更多关于c#操作csv的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论