将datagridview导出到csv文件找到了一些示例代码来执行此操作,但无法使其正常工作。顺便说一句,我的数据网格没有数据绑定到源。当我尝试使用Streamwriter仅写入列标题时,一切正常,但是当我尝试导出包括数据在内的整个数据网格时,出现异常trhown。System.NullReferenceException:对象引用未设置到对象的实例。在Scanmonitor.Form1.button1_Click(Objectsender,EventArgse)这是我的代码,错误在下面行中给出:dataFromGrid=dataFromGrid+','+dataRowObject.Cells[i].Value.ToString();//csvFileWriter=StreamWriter//scannerDataGridView=DataGridViewprivatevoidbutton1_Click(objectsender,EventArgse){stringCsvFpath=@"C:scannerCSV-EXPORT.csv";尝试{System.IO.StreamWritercsvFileWriter=newStreamWriter(CsvFpath,false);字符串columnHeaderText="";intcountColumn=scannerDataGridView.ColumnCount-1;如果(countColumn>=0){columnHeaderText=scannerDataGridView.Columns[0].HeaderText;}for(inti=1;i<=countColumn;i++){columnHeaderText=columnHeaderText+','+scannerDataGridView.Columns[i].HeaderText;}csvFileWriter.WriteLine(columnHeaderText);foreach(DataGridViewRowdataRowObjectinscannerDataGridView.Rows){if(!dataRowObject.IsNewRow){stringdataFromGrid="";dataFromGrid=dataRowObject.Cells[0].Value.ToString();for(inti=1;i<=countColumn;i++){dataFromGrid=dataFromGrid+','+dataRowObject.Cells[i].Value.ToString();csvFileWriter.WriteLine(dataFromGrid);}}}csvFileWriter.Flush();csvFileWriter.Close();}catch(ExceptionexceptionObject){MessageBox.Show(exceptionObject.ToString());}LINQ好吧!varsb=newStringBuilder();varheaders=dataGridView1.Columns.Cast();sb.AppendLine(string.Join(",",headers.Select(column=>"""+column.HeaderText+""").ToArray()));foreach(dataGridView1.Rows中的DataGridViewRow行){varcells=row.Cells.Cast();sb.AppendLine(string.Join(",",cells.Select(cell=>"""+cell.Value+""").ToArray()));事实上,c.Value.ToString()会抛出一个空值,而c.Value会正确地转换为一个空字符串DataGridView一个鲜为人知的功能是能够以编程方式选择部分或全部的DataGridCell并发送它们使用DataGridView.GetClipboardContent()方法到DataObject。那有什么好处?DataObject不仅存储对象,还存储各种不同格式的对象表示。这就是剪贴板发挥其魔力的方式;它存储各种格式,不同的控件/类可以指定它们希望接受的格式。在这种情况下,DataGridView会将选定的单元格以制表符分隔的文本格式、CSV格式或HTML(*)的形式存储在DataObject中。可以通过调用DataObject.GetData()或DataObject.GetText()方法并指定预定义的数据格式枚举来检索DataObject的内容。在这种情况下,我们希望CSV的格式为TextDataFormat.CommaSeparatedValue,然后我们可以使用System.IO.File类将该结果写入文件。(*)实际上,它返回的并不是严格意义上的HTML。此格式还包含您不希望的数据标头。虽然标题确实包括HTML的起始位置,但我只是丢弃了HTML标记上方的任何内容,例如myString.Substring(IndexOf(""));注意下面的代码:voidSaveDataGridViewToCSV(stringfilename){//选择是否写header。请改用EnableWithoutHeaderText来省略标头。dataGridView1.ClipboardCopyMode=DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;//选中所有单元格dataGridView1.Sel选中的单元格到DataObjectDataObjectdataObject=dataGridView1.GetClipboardContent();//获取DataObject的文本,并将其序列化为文件File.WriteAllText(filename,dataObject.GetText(TextDataFormat.CommaSeparatedValue));现在,不是更好吗?为什么要重新发明轮子?希望这会有所帮助...我知道这可能已经死了,但我编写了一个简单的代码,从DataGridView对象创建一个CSV,并询问你想把它保存在哪里。它很简单,只需粘贴功能并使用它。它已经有一些基本的异常处理,所以使用起来非常安全。请享用。privatevoidSaveToCSV(DataGridViewDGV){stringfilename="";SaveFileDialogsfd=newSaveFileDialog();sfd.Filter="CSV(*.csv)|*.csv";sfd.FileName="输出.csv";if(sfd.ShowDialog()==DialogResult.OK){MessageBox.Show("数据将被导出,准备就绪时您会收到通知。");如果(File.Exists(文件名)){尝试{File.Delete(文件名);}catch(IOExceptionex){MessageBox.Show("无法将数据写入磁盘。"+ex.Message);}}intcolumnCount=DGV.ColumnCount;字符串columnNames="";字符串[]输出=新字符串[DGV.RowCount+1];for(inti=0;iEDIT:Changed';'to','因为我们在谈论CSV文件时发现问题,编码没问题,但我有一个空单元格出现问题。你的代码几乎就在那里......但我做了以下更正,效果很好。谢谢你的帖子。错误:字符串[]输出=新字符串[dgvLista_Apl_Geral.RowCount+1];更正:string[]output=newstring[DGV.RowCount+1];错误:System.IO.File.WriteAllLines(文件名,输出,System.Text.Encoding.UTF8);更正:System.IO.File.WriteAllLines(sfd.FileName,output,System.Text.Encoding.UTF8);“csvFileWriter.WriteLine(dataFromGrid);”这一行应该在右括号移动下方一行,否则你会得到很多重复的结果:for(inti=1;iPleasecheckthiscode.itsworkingfinetry{//BuildtheCSVfiledataasaCommaseparatedstring.stringcsv=string.Empty;//为CSV添加表头行="rn";//添加行foreach(DataGridViewRowrowindataGridView1.Rows){foreach(DataGridViewCellcellinrow.Cells){if(cell.Value!=null){//添加数据rows.csv+=cell.Value.ToString().TrimEnd(',').Replace(",",";")+',';}//break;}//Addnewline.csv+="rn";}//出口转换为CSV。stringfolderPath="C:\CSV\";如果(!Directory.Exists(folderPath)){Directory.CreateDirectory(folderPath);}File.WriteAllText(folderPath+"Invoice.csv",csv);消息框.Show("");}catch{MessageBox.Show("");我认为这对于您的SaveToCSV函数是正确的:(否则为空...)for(inti=0;iisnot:以上是C#学习教程:将datagridview导出到csv文件以共享所有内容。如果是对大家有用,需要详细了解C#学习教程,希望大家多多关注---for(inti=1;(i-1))本文整理自网络,不代表立场。如涉及侵权,请点击维权联系管理员删除,如需转载请注明出处:
