Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataTable到csv转换后缺少行_C#_Datagridview_Datatable_Export_Export To Csv - Fatal编程技术网

C# DataTable到csv转换后缺少行

C# DataTable到csv转换后缺少行,c#,datagridview,datatable,export,export-to-csv,C#,Datagridview,Datatable,Export,Export To Csv,我正在使用CsvHelper库将一个csv文件转换为另一个具有不同结构的csv文件。首先,我将csv文件的内容读入一个datatable,并显示在DataGridView上,所有内容都能正常工作 将DataTable的内容导出到新的csv文件时出现问题。由于某些原因,DataTable末尾的某些行没有导出。我认为这与StreamWriter类有关,但我找不到原因 我使用夏普开发 //Read the original CSV file void Button1Click(object sende

我正在使用CsvHelper库将一个csv文件转换为另一个具有不同结构的csv文件。首先,我将csv文件的内容读入一个datatable,并显示在DataGridView上,所有内容都能正常工作

将DataTable的内容导出到新的csv文件时出现问题。由于某些原因,DataTable末尾的某些行没有导出。我认为这与StreamWriter类有关,但我找不到原因

我使用夏普开发

//Read the original CSV file
void Button1Click(object sender, EventArgs e)
{
    DialogResult result = openFileDialog1.ShowDialog();

    if (result == DialogResult.OK) {
        StreamReader str = new StreamReader(openFileDialog1.FileName);
        CsvReader csvReadFile = new CsvReader(str);

        dt = new DataTable();
        dt.Columns.Add("Value", typeof(int));
        dt.Columns.Add("Time Stamp", typeof(DateTime));

        while (csvReadFile.Read()) {
            var row = dt.NewRow();
            foreach (DataColumn column in dt.Columns) {
                row[column.ColumnName] = csvReadFile.GetField(column.DataType, column.ColumnName);
            }
            dt.Rows.Add(row);
        }
        dataGridView1.DataSource = dt;
    }
}
//Write the new CSV file
void SaveButtonClick(object sender, EventArgs e)
{
    DialogResult result = saveFileDialog1.ShowDialog();
    if (result == DialogResult.OK) {
        StreamWriter stw = new StreamWriter(saveFileDialog1.FileName);
        CsvWriter csvWrite = new CsvWriter(stw);
        foreach (DataRow row in dt.Rows) {
            for (var i = 0; i < dt.Columns.Count; i++) {
                csvWrite.WriteField(row[i]);
            }
            csvWrite.NextRecord();
        }
    }
//读取原始CSV文件
无效按钮1单击(对象发送者,事件参数e)
{
DialogResult=openFileDialog1.ShowDialog();
if(result==DialogResult.OK){
StreamReader str=新的StreamReader(openFileDialog1.FileName);
CsvReader csvReadFile=新CsvReader(str);
dt=新数据表();
添加(“值”,类型(int));
添加(“时间戳”,类型(日期时间));
while(csvReadFile.Read()){
var row=dt.NewRow();
foreach(dt.Columns中的DataColumn列){
行[column.ColumnName]=csvReadFile.GetField(column.DataType,column.ColumnName);
}
dt.行。添加(行);
}
dataGridView1.DataSource=dt;
}
}
//写入新的CSV文件
void savebutton单击(对象发送方,事件参数e)
{
DialogResult=saveFileDialog1.ShowDialog();
if(result==DialogResult.OK){
StreamWriter stw=新的StreamWriter(saveFileDialog1.FileName);
CsvWriter csvWrite=新CsvWriter(stw);
foreach(数据行中的数据行){
对于(var i=0;i
难道你不能只做
csvWrite.WriteRecords(dt.Rows);
吗?如果你用
块将writer放入
中,它将
Dispose()
这将
Flush()
缓冲区。在方法退出之前,这可能没有足够的时间发生。您应该小心处理实现
IDisposable
的任何东西,而不仅仅是
StreamWriter
。您在哪里关闭
stw
?@Crowcoder它通过使用“using”块工作。Thanks@JohnG我不是,这是我的错。