Exportación de WPF DataGrid a un archivo de texto en un formato de aspecto agradable. archivo de texto debe ser fácil de leer

StackOverflow https://stackoverflow.com/questions/3049887

Pregunta

¿Hay una forma sencilla de exportar un WPF DataGrid a un archivo de texto y un archivo CSV? He hecho un poco de búsqueda y no puede ver que hay una cuadrícula de datos método sencillo para hacerlo. Tengo algo de trabajo (apenas), haciendo uso de la ItemsSource de la cuadrícula de datos. En mi caso, se trata de una gran variedad de estructuras. Hago algo con StreamWriters y StringBuilders (detalles disponibles) y básicamente tener:

StringBuilder destination = new StringBuilder();
destination.Append(row.CreationDate);
destination.Append(seperator);  // seperator is '\t' or ',' for csv file
destination.Append(row.ProcId);
destination.Append(seperator);
destination.Append(row.PartNumber);
destination.Append(seperator);

I hacer esto para cada struct en la matriz (en un bucle). Esto funciona bien. El problema es que no es fácil de leer el archivo de texto. Los datos pueden ser de diferentes longitudes dentro de la misma columna. Me gustaría ver algo como: 2007-03-03 234 238 423 823 823 829 923 2007-03-03 66 99 Y, por supuesto, me sale algo como: 2007-03-03 234 238 423 823 823 829 923 2007-03-03 66 99

No es de extrañar que da que estoy usando delimitadores Tab, pero espero hacerlo mejor. Sin duda, es fácil de leer en la cuadrícula de datos! Yo podría, por supuesto tiene algo de lógica a los valores almohadilla corta con espacios, pero que parece bastante desordenado. Pensé que podría haber una mejor manera. También tengo la sensación de que este es un problema común y uno que probablemente ha sido resuelto antes (esperemos que dentro de las mismas clases .NET).

Gracias.

¿Fue útil?

Solución

Asumo la meta es ser lo más WYSIWYG como sea posible. En ese caso lo haría:

  1. Recorrer todos DataGridRows, y para cada una acumulación de una cadena [] que contiene los datos que aparecen en cada DataGridCell. Esto es fácil para la mayoría de los tipos DataGridColumn. Para DataGridTemplateColumn tendrá que utilizar la Encuadernación luego convertir .ToString ().
  2. También sería realizar un seguimiento de la longitud máxima de cadena en cada columna, mientras lo hacía.

El siguiente paso depende del tipo de exportación:

  • Para una exportación csv que podría agregar todas las cuerdas en cada cadena [] comillas con comas entre ellos y escribirlos.
  • Para una exportación de texto plano me anexar todos los hilos en cada cadena [] rellena con espacios a 1+ la longitud máxima de la cadena para esa columna y escribir a cabo.

La razón para utilizar el DataGridRow real, DataGridCell y objetos DataGridColumn es escribir exactamente lo que el usuario final ve. Por ejemplo, usted puede saltarse las columnas ocultas, aplicar formatos de cadena en la unión, filtrado de honor / agrupamiento / clasificación, etc.

Otros consejos

Me gustaría utilizar la funcionalidad Application.Copy de la cuadrícula, seleccione todos y luego copiar en el código, a continuación, puede analizar los datos del portapapeles de ayuda que está en CSV, HTML y algunos otros formatos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top