【C#】datagridview分段保存为几个CSV文件
来源:互联网 发布:移动4g 网络 编辑:程序博客网 时间:2024/06/05 02:09
在实际应用中,在导出文件时,会遇到导出的文件过大,导致导出速度慢,导出数据不全的问题,影响软件正常使用。本文介绍一种将数据按照设定的数值分成几部分进行保存,保证导出数据的完整性。
直接帖程序;
/// <summary> /// 将datagridview的数据分成几个CSV文件进行保存。 /// </summary> /// <param name="dataGridView">要导出的DataGridView;要导出的CSV文件的个数,日志的总行数</param> /// <returns></returns> public bool FenDuanDataGridViewToCSV(DataGridView dataGridView,int geshu,int rowscount) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "CSV files (*.csv)|*.csv"; saveFileDialog.FilterIndex = 0; saveFileDialog.RestoreDirectory = true; saveFileDialog.CreatePrompt = true; saveFileDialog.FileName = null; saveFileDialog.Title = "保存"; if (saveFileDialog.ShowDialog() == DialogResult.OK) { string savepath = saveFileDialog.FileName.ToString();//获取文件路径 string filepath = savepath.Substring(0, savepath.LastIndexOf("\\"));//获取文件路径,不带文件名 string filenameext = savepath.Substring(savepath.LastIndexOf("\\") + 1);//获取文件名(带后缀),不带路径 string filename = filenameext.Substring(0, filenameext.LastIndexOf("."));//获取文件名,不带后缀 string nowpath = "";//定义分段的保存路径 for (int i = 0; i < geshu;i++ ) { if (i < 1)//判断是否为0,若为0,则直接按照指定的路径保存,不为0时,按照自定义的路径保存 { nowpath=savepath; } else { System.IO.Directory.CreateDirectory(filepath);//先创建文件夹路径 nowpath = filepath +"\\"+filename+ Convert.ToString(i) + ".csv";//创建分段的保存路径 System.IO.File.Create(nowpath).Close();//不为0时,要先创建此路径,.close()同时解决此文件被另一线程占用的问题 } StreamWriter sw = new StreamWriter(nowpath, false, System.Text.Encoding.GetEncoding(-0));//false为覆盖。true为接着写。 string strLine = ""; try { Thread thdSub = new Thread(new ThreadStart(showmsss)); thdSub.Start(); for (int c = 0; c < dataGridView.ColumnCount; c++) { if (c > 0) strLine += ","; strLine += dataGridView.Columns[c].HeaderText; } strLine.Remove(strLine.Length - 1); sw.WriteLine(strLine); strLine = ""; for (int j = (i * x); j < (i + 1) * x; j++) { //判断是否也保存完整,若已保存完整,则跳出循环,===== //if(dataGridView.Rows[j].Cells[1].Value.ToString()=="NULL")//此行第一列是否没有数据 //{ // break; //} if (i == geshu - 1){if (j == rowscount){ break; } } strLine = ""; int colCount = dataGridView.Columns.Count; for (int k = 0; k < colCount; k++) { if (k > 0 && k < colCount) strLine += ","; if (dataGridView.Rows[j].Cells[k].Value == null) strLine += ""; else { string cell = dataGridView.Rows[j].Cells[k].Value.ToString().Trim(); cell = cell.Replace("\"", "\"\""); cell = "\"" + cell + "\""; strLine += cell; } } sw.WriteLine(strLine); } sw.Close(); MessageBox.Show("部分数据被导出到:" + nowpath, "导出完毕", MessageBoxButtons.OK, MessageBoxIcon.Information); thdSub.Abort(); } catch (Exception ex) { MessageBox.Show(ex.Message, "导出错误", MessageBoxButtons.OK, MessageBoxIcon.Information); return false; } nowpath = "";//将保存路径清空,方便下次赋值。 } } return true; }
使用此方法,即只弹出一次保存文件对话框,分段保存的路径在保存文件对话框选定的基础上加1,几个输入获取如下:
int rowcount = dataGridView_ATP.Rows.Count-1;//获取查询到的日志的列数
int geshu;//设置分段导出的CSV文件的个数,初始化为0;
geshu = (rowcount / x) + 1;//获得要导出成为的CSV文件的个数;
int x自己设置它的值。
参考的资料:http://www.cnblogs.com/tianguook/p/3277258.html
https://zhidao.baidu.com/question/306817051847789284.html
解决问题“文件xxx正由另一进程使用,因此该进程无法访问此文件”
创建一个文件路径的方法:https://zhidao.baidu.com/question/92028854.html
streamwriter的使用方法。
1 0
- 【C#】datagridview分段保存为几个CSV文件
- C#:读取csv文件,保存为csv文件
- 保存为excel,CSV文件
- 把页面信息保存为csv文件
- CSV文件保存为utf8编码格式
- 从ldap xmpp拿数据保存为csv文件
- 使用js把数据保存为csv文件
- scrapy爬虫保存为csv文件的技术分析
- 数组 保存为 txt, npy, csv 文件, 数组遍历enumerate
- 单个爬虫文件使用scrapy保存为csv格式
- 遍历文件夹下后缀为csv的文件,保存文件名
- go语言 二维切片利用encoding/csv保存为csv文件
- vb.net datagridview导出.csv文件 函数
- DataGridView生成CSV,XML 和 EXCEL文件
- DataGridView生成CSV,XML 和 EXCEL文件
- 关于Excel保存为csv文件时提示“可能含有与CSV(逗号分隔)不兼容的功能”
- 【c++】csv文件读写
- 【C++】读写CSV文件
- Android Mvp快速搭建框架MVP+Dagger2+Retrofit+Rxjava
- 线性表、栈、队列等查找、删除、插入的时间复杂度O()
- 《Pro .Net 4 Parallel Programming in C#》笔记
- 关于EVAL_BODY_INCLUDE、SKIP_BODY、EVAL_BODY_AGAIN、EVAL_PAGE、SKIP_PAGE的区别探讨
- Java语言编码规范 -01
- 【C#】datagridview分段保存为几个CSV文件
- 将博客搬至CSDN
- 关于App跳转到系统设置的界面
- Java Mail发送邮件(带多个附件)
- 2006-09-24
- Java 双检锁问题
- Sun HotSpot 1.4.1 JVM学习总结
- UVA 10082
- hihoCoder~~~#1051 : 补提交卡