2011-12-05 5 views
0

レポートを生成する必要があり、選択されたフォーマットはFlowDocumentsです。私はのような何かをしなければならないテキストの一行を追加する必要がある場合快適な方法で作成する方法WPFを使用したコードによるFlowDocuments?

list.ListItems.Add(new ListItem(new Paragraph(new Run(string.Format("XXX XXXXXX: {0}", _result.XXX.Count))))); 
list.ListItems.Add(new ListItem(new Paragraph(new Run(string.Format("XXX XXXXXX: {0}", _result.XXX()))))); 
list.ListItems.Add(new ListItem(new Paragraph(new Run(string.Format("XXX XXXXXX: {0}", _result.LossOperations()))))); 

を:私は、コードを通してそれらを生成していますように私はこのようなことをやって自分のすべての時間を見つける

Paragraph auxParagraph = new Paragraph(); 
auxParagraph.Inlines.Add("Executing time " + _result.ExecutingTime.ToString()); 
report.Blocks.Add(auxParagraph); 

私に少し残酷に見えます。私は正しい方法でAPIを使用していますか?手作業で文書を作成することについての文書化された話がすべて見られます。コードによって作成されることは意図されておらず、別のフォーマットを調べるべきでしょうか?あるいは、FlowDocumentsでの作業を簡単にする他の高レベルAPIがありますか?

ありがとうございます!

編集:テーブルでの作業だけで、別の例:

foreach (DateTime availableDay in _result.Generator.AvailableDays) 
     { 
      Table table = new Table(); 
      table.Columns.Add(new TableColumn()); 
      table.Columns.Add(new TableColumn()); 
      table.Columns.Add(new TableColumn()); 
      table.Columns.Add(new TableColumn()); 
      table.Columns.Add(new TableColumn()); 

      TableRowGroup headers = new TableRowGroup(); 
      TableRow headersRow = new TableRow(); 

      headersRow.Cells.Add(new TableCell(new Paragraph(new Run("XXX XXXX")))); 
      headersRow.Cells.Add(new TableCell(new Paragraph(new Run("XXX XXXX")))); 
      headersRow.Cells.Add(new TableCell(new Paragraph(new Run("XXX XXXX")))); 
      headersRow.Cells.Add(new TableCell(new Paragraph(new Run("XXX XXXX")))); 
      headersRow.Cells.Add(new TableCell(new Paragraph(new Run("XXX XXXX")))); 

      headers.Rows.Add(headersRow); 
      table.RowGroups.Add(headers); 

      DateTime day = availableDay; 

      TableRowGroup valuesGroup = new TableRowGroup(); 
      foreach (Operation operation in dailyOperations) 
      { 
       TableRow row = new TableRow(); 
       row.Cells.Add(new TableCell(new Paragraph(new Run("XXX XXXX")))); 
       row.Cells.Add(new TableCell(new Paragraph(new Run("XXX XXXX")))); 
       row.Cells.Add(new TableCell(new Paragraph(new Run("XXX XXXX")))); 
       row.Cells.Add(new TableCell(new Paragraph(new Run("XXX XXXX")))); 
       row.Cells.Add(new TableCell(CreateColoredValue(operation.Result))); 
       valuesGroup.Rows.Add(row); 
      } 
      table.RowGroups.Add(valuesGroup); 

      result.Blocks.Add(table); 
     } 

答えて

1

あなたのリストと、数字は特殊なケースのようなものです。私はいくつかのオーバーロードされたメソッドを作成します。

static Paragraph P(string fmt, object[] params) { ... } 
static Paragraph P(string s) { return P(new Run(s)); } 
static Paragraph P(Run r) { return new Paragraph(r); } 

そして、あなたは

list.ListItems.Add(new ListItem(P("XXX XXXXXX: {0}", _result.XXX.Count))); 

あなたは

+0

もちろんのListItem、ブロックなどのために、いくつかの方法で、さらにそれを飼いならすことができます持っているだろうが、である。この方法フレームワークは使用される予定ですか?少し見える... mmm ...未完成? –

+0

あなたは通常XAMLを書いています...もしデザイナーが壊れていなければ。 –

+0

Mmm、私はランタイムにユーザーに情報を提示する方法としてすべてのものを生成しています。私たちはFlowDocumentsをWPFの本質的な選挙のように思っています(データベースがなくても実行時にすべての情報が生成されるため、Crystalを避けています)。他の何かがうまくいくか? –

関連する問題