c# wpf csv datagrid export-to-csv

c# - CSV Export from DataGrid-Filas incorrectas



wpf export-to-csv (1)

¿Cómo puedo exportar mi cuadrícula de datos a CSV correctamente? ¿Por qué las Filas están en diferentes columnas?

Retorno de la función ExportToCsv:

Encabezados de columna:

"SR #; 8D Informe solicitado; Estado (ASSIST); En I + D; NÚMERO BTQ; Prioridad; Fecha objetivo; Fecha de implementación; Estado (BTQ)"

Filas: ¡INCORRECTO!

"1-3271406718; sí; sí; BTQ00153254; 6 - Mejora; 22.02.2014; 09.09.2014; COMPLETADO; Esp. Ing. Wait"

Como debería ser:

Encabezados de columna:

"SR #; 8D Informe solicitado; Estado (ASSIST); En I + D; NÚMERO BTQ; Prioridad; Fecha objetivo; Fecha de implementación; Estado (BTQ)"

Filas:

"1-3271406718; sí; Esp. Inglés; sí; BTQ00153254; 6 - Mejorado; 22.02.2014; 09.09.2014; COMPLETADO"

aquí mi código:

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();


Pruébalo con Linq. Es más simple y fácil de leer:

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(); }

Simplemente guarde el String como archivo *.csv y listo.