Exportieren von WPF Datagrid in eine Textdatei in einem gut aussehenden Format. Textdatei müssen leicht zu lesen

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

Frage

Gibt es eine einfache Möglichkeit, eine WPF-Datagrid in eine Textdatei und eine CSV-Datei zu exportieren? Ich habe einige die Suche getan und kann nicht sehen, dass es eine einfache Datagrid-Methode, dies zu tun. Ich habe etwas arbeiten (gerade noch) bekam durch die Verwendung des Itemssource des Datagrid zu machen. In meinem Fall ist dies ein Array von Strukturen. Ich mache etwas mit StreamWriters und Stringbuilders (Details verfügbar) und im Grunde hat:

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

ich tue dies für jede Struktur in der Anordnung (in einer Schleife). Dies funktioniert gut. Das Problem ist, dass es nicht einfach ist, die Textdatei zu lesen. Die Daten können in der gleichen Spalte unterschiedlich lang sein. Ich möchte wie etwas sehen: 2007-03-03 234238423823 823829923 2007-03-03 66 99 Und natürlich bekomme ich so etwas wie: 2007-03-03 234238423823 823829923 2007-03-03 66 99

Es ist nicht verwunderlich, dass ich gebe Tab-Trennzeichen bin, aber ich hoffe, es besser zu machen. Es ist sicherlich leicht im Datenraster zu lesen! Ich könnte natürlich eine gewisse Logik zu Pad kurze Werte mit Leerzeichen haben, aber das scheint ziemlich chaotisch. Ich dachte, es könnte ein besserer Weg geben. Ich habe auch das Gefühl, dass dies ist ein häufiges Problem und eine, die wahrscheinlich vor (hoffentlich innerhalb der .NET-Klassen selbst) gelöst wurde.

Danke.

War es hilfreich?

Lösung

Ich gehe davon aus dem Ziel ist, so WYSIWYG wie möglich zu sein. In diesem Fall würde ich:

  1. Schleife durch alle DataGridRows, und für jeden Build ein String [], um die Daten enthalten, in jedem Datagridcell angezeigt. Dies ist einfach für die meisten Datagrid Typen. Für Datagridtemplatecolumn werden Sie brauchen die Bindung dann konvertieren .ToString () verwenden.
  2. Ich würde auch in jeder Spalte Spur der maximalen Stringlänge halten, wie ich es tue.

Der nächste Schritt ist abhängig von dem Exporttyp:

  • Für einen CSV-Export würde ich dann append alle Saiten in jedem String [] in Anführungszeichen mit Komma zwischen ihnen und schreiben sie aus.
  • Für eine Nur-Text-Export ich alle Fäden in jedem String anhängen würde [] mit Leerzeichen aufgefüllt die maximale Stringlänge für diese Spalte auf 1+ und schreiben sie aus.

Der Grund, die tatsächliche DataGridRow zu verwenden, und Datagridcell Datagrid Objekte genau zu schreiben, was der Endbenutzer sieht. Zum Beispiel können Sie versteckte Spalten überspringen, String-Formate in der Bindung, ehrt Filterung / Gruppierung / Sortierung, usw. gelten.

Andere Tipps

würde ich die Application.Copy Funktionalität des Gitters verwenden, wählen alle dann in Code zu kopieren, dann können Sie die Zwischenablage Helferdaten analysieren, die in csv ist, html und ein paar andere Formate.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top