2011-12-05 47 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​​?我所見到的所有文件都是關於手動創建文檔的討論。也許他們不打算由代碼創建,我們應該檢查另一種格式?或者也許還有其他更高級別的API使得使用FlowDocuments更簡單?

謝謝!

編輯:只是另一個例子與表工作:

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

當然一些方法進一步馴服它,但是這是怎麼了預計將使用框架?看起來有點......嗯......未完成? –

+0

你通常會寫XAML ......如果設計師沒有這麼破碎。 –

+0

嗯,我在運行時生成所有東西,作爲向用戶顯示信息的一種方式。我們認爲FlowDocuments是WPF中的自然選擇(我們避免使用Crystal,因爲所有信息都是在運行時不帶數據庫的情況下生成的)。也許別的東西會更好? –