Esportazione WPF DataGrid a un file di testo in un formato di bell'aspetto. File di testo deve essere facile da leggere

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

Domanda

C'è un modo semplice per esportare un WPF DataGrid a un file di testo e un file .csv? Ho fatto qualche ricerca e non riesco a vedere che c'è un metodo semplice DataGrid per farlo. Io ho qualcosa di lavoro (a malapena) facendo uso della ItemsSource del DataGrid. Nel mio caso, questo è un array di strutture. Faccio qualcosa con StreamWriters e StringBuilders (dettagli disponibili) e fondamentalmente avere:

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

Lo faccio per ogni struttura nella matrice (in un ciclo). Questo funziona bene. Il problema è che non è facile da leggere il file di testo. I dati possono essere di lunghezze diverse all'interno della stessa colonna. Mi piacerebbe vedere qualcosa di simile: 2007-03-03 234.238.423.823 823.829.923 2007-03-03 66 99 E, naturalmente, ho qualcosa di simile: 2007-03-03 234.238.423.823 823.829.923 2007-03-03 66 99

Non è sorprendente dando che sto usando delimitatori Tab, ma spero di fare meglio. E 'certamente facile da leggere in DataGrid! Potrei, naturalmente, hanno una certa logica per pad valori corte con spazi, ma che sembra piuttosto confusa. Ho pensato che ci potrebbe essere un modo migliore. Ho anche la sensazione che questo è un problema comune e uno che è stato probabilmente risolto prima (si spera all'interno delle classi .NET stessi).

Grazie.

È stato utile?

Soluzione

Suppongo che l'obiettivo è quello di essere il più possibile WYSIWYG. In tal caso lo farei:

  1. Loop attraverso tutti DataGridRows, e per ognuno di costruzione di uno string [] che contiene i dati visualizzati in ogni DataGridCell. Questo è facile per la maggior parte dei tipi DataGridColumn. Per DataGridTemplateColumn è necessario utilizzare la rilegatura poi convertire .ToString ().
  2. Ho anche sarebbe tenere traccia della lunghezza massima della stringa in ogni colonna, come ho fatto così.

Il prossimo passo dipende dal tipo di esportazione:

  • Per un export csv Vorrei quindi aggiungere tutte le stringhe di ogni string [] all'interno citazioni con virgole tra loro e scrivere.
  • Per un export di testo Vorrei aggiungere tutte le stringhe in ogni string [] riempita con gli spazi per 1+ la lunghezza massima della stringa per quella colonna e scrivere.

Il motivo di utilizzare il DataGridRow reale, DataGridCell e oggetti DataGridColumn è quello di scrivere esattamente ciò che l'utente finale vede. Per esempio è possibile saltare le colonne nascoste, applicare i formati di stringa nel legame, filtraggio onore / raggruppamento / smistamento, ecc.

Altri suggerimenti

Vorrei utilizzare la funzionalità Application.Copy della griglia, selezionare tutti quindi copiare nel codice, quindi è possibile analizzare i dati negli appunti di supporto che è in formato CSV, HTML e un paio di altri formati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top