C# Datagridview到CSV未正确保存

C# Datagridview到CSV未正确保存,c#,csv,format,C#,Csv,Format,我有以下代码将DataGridView数据导出到CSV文件。然后使用此CSV文件将数据导入另一个系统 但是,当我们导入文件时,系统不喜欢它。但是,如果我们打开CSV文件,单击保存并关闭,系统将接受它 手动创建CSV时,只需将文件保存为“CSV(逗号分隔)”。系统接受罚款 我尝试了几种不同类型的编码,您可以从注释行中看到 private void SaveToCSV(DataGridView DGV) { string filename = "";

我有以下代码将DataGridView数据导出到CSV文件。然后使用此CSV文件将数据导入另一个系统

但是,当我们导入文件时,系统不喜欢它。但是,如果我们打开CSV文件,单击保存并关闭,系统将接受它

手动创建CSV时,只需将文件保存为“CSV(逗号分隔)”。系统接受罚款

我尝试了几种不同类型的编码,您可以从注释行中看到

private void SaveToCSV(DataGridView DGV)
        {
            string filename = "";
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "CSV (*.csv)|*.csv";
            sfd.FileName = "DataConversion.csv";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                if (File.Exists(filename))
                {
                    try
                    {
                        File.Delete(filename);
                    }
                    catch (IOException ex)
                    {
                        MessageBox.Show("It wasn't possible to write the data to the disk." + ex.Message);
                    }
                }
                //Column Names = ""
                string columnNames = "PER_REF_NO,OBJECT,POST_NO,EFFECTIVE_DATE,REP_OBJECT,REP_POST_NO";
                //Count rows in DataGridView + 1
                string[] output = new string[DGV.RowCount + 1];
                output[0] += columnNames;
                int[] cols = new int[] { 0, 1, 11, 18, 21, 22 };

                for (int i = 1; (i - 1) < DGV.RowCount; i++)
                {
                    foreach (int col in cols)
                    {
                        if (col == 1 || col == 21)
                        {
                            output[i] += "POSITION" + ",";
                        }
                        else if (col == 18)
                        {
                            string formatedDate = Convert.ToDateTime(DGV.Rows[i - 1].Cells[col].Value).ToString("yyyMMdd");
                            output[i] += formatedDate + ",";
                        }
                        else
                        {
                            output[i] += DGV.Rows[i - 1].Cells[col].Value?.ToString() + ",";
                        }
                    }
                }
                System.IO.File.WriteAllLines(sfd.FileName, output, System.Text.Encoding.Default);
                //System.IO.File.WriteAllLines(sfd.FileName, output, Encoding.GetEncoding("Windows-1252"));
                //System.IO.File.WriteAllLines(sfd.FileName, output, System.Text.Encoding.UTF8);

                //CLEAR DGV AFTER EXPORT
                DGV.Rows.Clear();
                DGV.Refresh();
                MessageBox.Show("Saved Successfully");
            }
        } 
private void SaveToCSV(DataGridView DGV)
{
字符串filename=“”;
SaveFileDialog sfd=新建SaveFileDialog();
sfd.Filter=“CSV(*.CSV)|*.CSV”;
sfd.FileName=“DataConversion.csv”;
if(sfd.ShowDialog()==DialogResult.OK)
{
if(File.Exists(filename))
{
尝试
{
删除(文件名);
}
捕获(IOEX异常)
{
MessageBox.Show(“无法将数据写入磁盘。”+ex.Message);
}
}
//列名=“”
string columnNames=“每个参考号、对象、发布号、生效日期、报告对象、报告发布号”;
//计算DataGridView中的行数+1
字符串[]输出=新字符串[DGV.RowCount+1];
输出[0]+=列名称;
int[]cols=新的int[]{0,1,11,18,21,22};
对于(inti=1;(i-1)
您可以说,当您打开文件并再次保存时,它就会开始工作。当大多数体面的文本编辑器试图保留源格式和编码(如果可能)时,您是如何打开文件的?您还可以使用记事本++查看是否存在不可打印的字节,通过转到
View>Show Symbols>Show All Characters
,将文件中保存的格式弄乱。我的大多数格式问题归结为字节顺序标记、错误的行尾或需要在文件末尾换行,所有这些都可以通过这种方式找到。我正在MS Excel中打开文件。然后单击save,它就可以工作了。使用Notepad++中的建议,我想我已经找到了问题所在。它将数据显示为例如“data,data,data”,我认为逗号不应位于最终数据之后。因此,当我在Excel中打开它时,它可能会自动更正此问题,而当我保存文件时,现在就可以了。但是,如果我没有在Excel中打开文件,则该文件在记事本++中不正确。如果执行查找和替换,请选择扩展模式,并将“,\n”替换为“\n”,然后保存该文件。这将删除行尾之前的尾随逗号。如果现在可以使用,那么后面的逗号就是您的问题,您需要在软件中解决这个问题。