Экспорт WPF DataGrid в текстовый файл в привлекательном формате.Текстовый файл должен быть легким для чтения - PullRequest
0 голосов
/ 16 июня 2010

Есть ли простой способ экспортировать WPF DataGrid в текстовый файл и файл .csv?Я провел некоторый поиск и не вижу, что для этого есть простой метод DataGrid.Я получил что-то работающее (едва), используя ItemsSource DataGrid.В моем случае это массив структур.Я делаю что-то с StreamWriters и StringBuilders (подробности доступны) и в основном:

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

Я делаю это для каждой структуры массива (в цикле).Это отлично работает.Проблема в том, что текстовый файл читать нелегко.Данные могут быть разной длины в одном и том же столбце.Я хотел бы видеть что-то вроде: 2007-03-03 234238423823 823829923 2007-03-03 66 99 И, конечно, я получаю что-то вроде: 2007-03-03 234238423823 823829923 2007-03-03 66 99

Не удивительно, что я использую разделители табуляции, но надеюсь, что получится лучше.Это, конечно, легко прочитать в DataGrid!Конечно, я мог бы иметь некоторую логику для заполнения коротких значений пробелами, но это выглядит довольно грязно.Я думал, что может быть лучше.У меня также есть ощущение, что это общая проблема, которая, вероятно, была решена раньше (возможно, в самих классах .NET).

Спасибо.

Ответы [ 2 ]

1 голос
/ 16 июня 2010

Полагаю, цель в том, чтобы быть как можно более WYSIWYG.В этом случае я бы:

  1. Цикл по всем DataGridRows, и для каждого построить строку [], содержащую данные, отображаемые в каждом DataGridCell.Это легко для большинства типов DataGridColumn.Для DataGridTemplateColumn вам нужно использовать Binding, а затем конвертировать .ToString ().
  2. Я бы также отслеживал максимальную длину строки в каждом столбце, как я это сделал.

Следующий шаг зависит от типа экспорта:

  • Для экспорта в CSV я бы добавил все строки в каждой строке [] внутри кавычек с запятыми между ними и выписал их.
  • Для экспорта в виде простого текста я бы добавил все строки в каждой строке [], дополненные пробелами, к 1 + максимальной длине строки для этого столбца и выписал их.

Причина использования фактическойОбъекты DataGridRow, DataGridCell и DataGridColumn должны записывать именно то, что видит конечный пользователь.Например, вы можете пропускать скрытые столбцы, применять строковые форматы в привязке, фильтровать / группировать / сортировать и т. Д.

0 голосов
/ 16 июня 2010

Я бы использовал функциональность Application.Copy в сетке, выделил все, затем скопировал в код, затем вы можете проанализировать вспомогательные данные буфера обмена, которые находятся в csv, html и некоторых других форматах.

...