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.