2011-12-05 17 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,因为所有信息都是在运行时不带数据库的情况下生成的)。也许别的东西会更好? –