0

WPF DataGrid をテキスト ファイルと .csv ファイルにエクスポートする簡単な方法はありますか? 私はいくつかの検索を行いましたが、そうするための単純な DataGrid メソッドがあることがわかりません。DataGrid の ItemsSource を利用することで、(かろうじて) 何かが機能しています。私の場合、これは構造体の配列です。私は 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 クラス自体の中で)。

ありがとう。

4

2 に答える 2

1

目標は可能な限りWYSIWYGになることだと思います。その場合、私は次のようにします。

  1. すべてのDataGridRowsをループし、それぞれについて、各DataGridCellに表示されるデータを含むstring[]を作成します。これは、ほとんどのDataGridColumnタイプで簡単です。DataGridTemplateColumnの場合、Bindingを使用してから、.ToString()を変換する必要があります。
  2. また、各列の最大文字列長を追跡します。

次のステップは、エクスポートの種類によって異なります。

  • 次に、csvエクスポートの場合、引用符で囲まれた各string []内のすべての文字列をカンマで囲んで追加し、それらを書き出します。
  • プレーンテキストのエクスポートでは、スペースで埋められた各string []内のすべての文字列を、その列の最大文字列長の1+に追加し、それらを書き出します。

実際のDataGridRow、DataGridCell、およびDataGridColumnオブジェクトを使用する理由は、エンドユーザーに表示される内容を正確に書き出すためです。たとえば、非表示の列をスキップしたり、バインディングに文字列形式を適用したり、フィルタリング/グループ化/並べ替えを尊重したりできます。

于 2010-06-16T04:13:37.780 に答える
0

グリッドの Application.Copy 機能を使用し、すべてを選択してコードにコピーすると、csv、html、およびその他のいくつかの形式のクリップボード ヘルパー データを解析できます。

于 2010-06-16T05:06:31.703 に答える