Exportation DataGrid WPF dans un fichier texte dans un joli format de la recherche. Fichier texte doit être facile à lire

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

Question

Y at-il un moyen simple d'exporter un DataGrid WPF dans un fichier texte et un fichier .csv? Je l'ai fait quelques recherches et ne vois pas qu'il existe une méthode simple DataGrid de le faire. J'ai quelque chose à travailler (à peine) en faisant usage de la ItemsSource du DataGrid. Dans mon cas, c'est un tableau de struct. Je fais quelque chose avec StreamWriters et StringBuilders (détails disponibles) et essentiellement avoir:

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

Je fais cela pour chaque structure dans la matrice (dans une boucle). Cela fonctionne très bien. Le problème est que ce n'est pas facile à lire le fichier texte. Les données peuvent être de longueurs différentes dans la même colonne. Je voudrais voir quelque chose comme: 2007-03-03 234238423823 823829923 03.03.2007 66 99 Et bien sûr, je reçois quelque chose comme: 2007-03-03 234238423823 823829923 2007-03-03 66 99

Il est pas étonnant que je donne à l'aide délimiteurs Tab, mais j'espère faire mieux. Il est certainement facile à lire dans le DataGrid! Je pourrais d'avoir bien sûr une certaine logique à des valeurs à court pad avec des espaces, mais qui semble tout à fait désordre. Je pensais qu'il pourrait y avoir une meilleure façon. J'ai aussi un sentiment que c'est un problème commun et qui a probablement été résolu avant (je l'espère dans les classes .NET eux-mêmes).

Merci.

Était-ce utile?

La solution

Je suppose que l'objectif est d'être aussi WYSIWYG que possible. Dans ce cas, je:

  1. Boucle à travers tous les DataGridRows, et pour chacun construire une chaîne [] contenant les données affichées dans chaque DataGridCell. C'est facile pour la plupart des types de DataGridColumn. Pour DataGridTemplateColumn vous aurez besoin d'utiliser la liaison puis convertir .ToString ().
  2. Je également garder une trace de la longueur maximale de la chaîne dans chaque colonne comme je l'ai fait.

L'étape suivante dépend du type d'exportation:

  • Pour une exportation csv je puis ajouter toutes les chaînes dans chaque chaîne [] entre guillemets avec des virgules entre eux et les écrire.
  • Pour une exportation de texte brut j'ajouter toutes les chaînes dans chaque string [] rembourré avec des espaces pour 1+ la longueur de chaîne maximale pour cette colonne et les écrire.

La raison d'utiliser la DataGridRow réelle, des objets DataGridCell et DataGridColumn est d'écrire exactement ce que l'utilisateur final voit. Par exemple, vous pouvez sauter des colonnes cachées, appliquer des formats de chaîne dans la liaison, l'honneur filtrage / regroupement / tri, etc.

Autres conseils

J'utiliser la fonctionnalité Application.Copy de la grille, sélectionnez Copier tout puis dans le code, vous pouvez analyser les données d'aide du presse-papier qui est en csv, html et quelques autres formats.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top