我想知道如何使用WPF的FixedDocument
作为报告引擎。有没有人有这样的经历?有哪些陷阱?
我正在开发的应用程序,必须打印一些报告。这些是订单,发票 - 也就是说,没有什么不寻常之处。最近,我查看了FlowDocument
和FixedDocumet
概念,我发现FixedDocumet
理论上是我需要的。
然而,我已经草拟了一份样本报告,并遇到了一个问题:
<PageContent>
<FixedPage Width="793.76" Height="1122.56" Margin="50,50,50,50" PrintTicket="">
<ListView Width="Auto" Height="Auto" ItemsSource="{Binding}">
<ListView.View>
<GridView>
<GridViewColumn Header="First name"
Width="200"
DisplayMemberBinding="{Binding FirstName}"/>
<GridViewColumn Header="Last name"
Width="200"
DisplayMemberBinding="{Binding LastName}"/>
</GridView>
</ListView.View>
</ListView>
</FixedPage>
</PageContent>
报告中通常会将长表格式数据拆分为多个页面(例如,包含1000个项目的发票)。此外,用户通常有一个选项,在每个页面上重复一个表头,或者不重复。
使用FixedPage
/ ItemsControl
是否有任何开箱即用的方式?
如果不是,如何在运行时定义,要呈现的当前项是不在页面?只要固定页面只是一组UIElements,我就可以动态生成它们。
P.S。我知道不同的商业报道引擎,问题不在于它们。
答案 0 :(得分:3)
我的经验表明,在打印/自定义解决方案方面,FixedDocument完全没用。
首先,它甚至不支持默认打印到多个页面。您需要为该功能定制DocumentPaginator。
我的两分钱是,不要使用它。使用ReportViewer。很灵活。
使用FixedDocument完成所有操作很有可能,但成本/时间不值得。它与比较ASM和高级语言几乎相同。是的,你可以在ASM中做所有事情,但这不值得。
FixedDocument不能真正称为报告引擎,因为它没有任何“引擎式”功能。