2015-10-26 59 views
1

如何正确导出我的数据网格为CSV?为什么行在不同的列?从DataGrid CSV导出 - 错行

ExportToCsv函数返回:

列标题:

“SR#; 8D报告请求;状态(ASSIST);在R&d; BTQ数;优先级;目标日期,执行日期,状态( BTQ)“

行:错误!

“1-3271406718;是;是; BTQ00153254; 6 - 增强; 2014年2月22日; 2014年9月9日;完成;工程等。”

如何应该是:

列标题:

“SR#; 8D报告请求;状态(ASSIST);在R&d; BTQ数;优先级;目标日期;实施日期;状态(BTQ)”

行:

“1-3271406718; yes; Eng。等待;是; BTQ00153254; 6 - 增强; 2014年2月22日; 2014年9月9日;已完成”

这里我的代码:

   string CsvFpath = saveDLG.FileName; 
       StreamWriter csvFileWriter = new StreamWriter(CsvFpath, false); 
       string columnHeaderText = ""; 
       int countColumn = dgvView.Columns.Count - 1; 
       if (countColumn >= 0) 
       { 
        columnHeaderText = (dgvView.Columns[0].Header).ToString(); 
       } 
       //Writing column headers 
       for (int i = 1; i <= countColumn; i++) 
       { 
        columnHeaderText = columnHeaderText + ';' + (dgvView.Columns[i].Header).ToString(); 
       } 
       csvFileWriter.WriteLine(columnHeaderText); 

       // Writing values row by row 
       for (int i = 0; i <= dgvView.Items.Count - 2; i++) 
       { 
        string dataFromGrid = ""; 
        for (int j = 0; j <= dgvView.Columns.Count - 1; j++) 
        { 
         if (j == 0) 
         { 
          dataFromGrid = ((DataRowView)dgvView.Items[i]).Row.ItemArray[j].ToString(); 
         } 
         else 
         { 
          dataFromGrid = dataFromGrid + ';' + ((DataRowView)dgvView.Items[i]).Row.ItemArray[j].ToString(); 
         } 
        } 
        csvFileWriter.WriteLine(dataFromGrid); 
       } 
       csvFileWriter.Flush(); 
       csvFileWriter.Close(); 
+0

请实际上提供您的CSV的例子为文本(即,什么是你的代码生成)拉泽而不是Excel对该文件的解释,并将其与问题相关联,而不是链接到图像。 – JenB

+0

@JenB是这样的吗? – Purger86

+0

是的,好多了。我不是C#程序员,所以实际上不能给你一个答案,但在讨论csv时,你需要坚持文本格式,因为在Excel中打开时会隐藏分隔符(例如;或),并在打开文件时作出其他解释。 – JenB

回答

1

使用LINQ试试它的简单,易于阅读:

public string DataGridToCSV(string delimiter = ";") 
    { 
     var sb = new StringBuilder(); 

     var headers = myDataGridView.Columns.Cast<DataGridViewColumn>(); 
     sb.AppendLine(string.Join(delimiter, headers.Select(column => "\"" + column.HeaderText + "\"").ToArray())); 

     foreach (DataGridViewRow row in myDataGridView.Rows) 
     { 
      var cells = row.Cells.Cast<DataGridViewCell>(); 
      sb.AppendLine(string.Join(delimiter, cells.Select(cell => "\"" + cell.Value + "\"").ToArray())); 
     } 
     return sb.ToString(); 
    } 

只是保存String作为*.csv文件,你就大功告成了。