WPF Datagridを見栄えの良い形式でテキストファイルにエクスポートします。テキストファイルは読みやすい必要があります

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

質問

WPFデータグリッドをテキストファイルと.CSVファイルにエクスポートする簡単な方法はありますか?私はいくつかの検索をしましたが、そうするための簡単なDatagridメソッドがあることがわかりません。 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);

配列内の各構造体に対してこれを行います(ループ内)。これは正常に機能します。問題は、テキストファイルを読み取るのは簡単ではないことです。データは、同じ列内で異なる長さにすることができます。 I'd like to see something like: 2007-03-03 234238423823 823829923 2007-03-03 66 99 And of course, I get something like: 2007-03-03 234238423823 823829923 2007-03-03 66 99

タブデリミターを使用していることを示すことは驚くことではありませんが、もっとうまくやりたいと思っています。 Datagridで読むのは確かに簡単です!もちろん、スペースで短い値を埋めるためのロジックがあるかもしれませんが、それは非常に厄介なようです。私はより良い方法があるかもしれないと思った。また、これは一般的な問題であり、おそらく以前に解決された問題であると感じています(うまくいけば.NETクラス自体内)。

ありがとう。

役に立ちましたか?

解決

目標はできるだけwysiwygになることだと思います。その場合、私は次のとおりです。

  1. すべてのdatagridrowsをループし、それぞれに対して、各datagridcellに表示されるデータを含む文字列[]を作成します。これは、ほとんどのDatagridColumnタイプにとって簡単です。 datagridtemplatecolumnの場合、バインディングを使用してから.toString()を変換する必要があります。
  2. また、私がそうしたように、各列の最大文字列長を追跡します。

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

  • CSVのエクスポートの場合、各文字列のすべての文字列を、それらの間にコンマが付いた引用符の内側に追加し、それらを書き留めます。
  • プレーンテキストのエクスポートの場合、各文字列のすべての文字列を、スペースでパディングして、その列の最大文字列の長さを1+に追加して書き留めます。

実際のdatagridrow、datagridcell、およびdatagridcolumnオブジェクトを使用する理由は、エンドユーザーが見ているものを正確に書き出すことです。たとえば、非表示の列をスキップしたり、バインディングに文字列形式を適用したり、フィルタリング/グループ化/並べ替えなどをしたりできます。

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top