在 创建报表 时,还可以使用 System.Windows.Forms 控件 (除了标准的 报表控件 以外)。 本主题阐述了如何在 XtraReports 中使用 Windows 窗体控件,并提供了一个示例。
本文档由下列小节组成。
在报表中的 Windows.Forms 控件
XtraReports 允许使用 System.Windows.Forms 控件,使用方式几乎与使用标准的 报表控件 相同。 例如,在设计时刻可以通过不同的手段把控件插入到报表 (例如,从 Windows 窗体 工具箱标签页中插入,从 窗体 设计器复制然后粘贴),在报表中拖放,或者从一个报表剪切并且粘贴到另一个报表中。
注意,在设计时刻把 Windows 窗体控件添加到报表时,两个元素将被添加: Windows 窗体控件本身和一个 WinControlContainer 对象。 后者作为 Windows 窗体控件的封装器,并且通过 WinControlContainer.WinControl 属性实际指向被插入的 Windows 窗体控件。 下面的插图举例说明了这个概念。
注意 |
---|
WinControlContainer 实现了在 XtraReports 中使用 Windows 窗体控件所必需的公共功能。 请参阅其概述获得其他信息。 |
通常,在“Preview”或“HTML View”模式中,并非所有在 XtraReports 中的 Windows 窗体控件都可以被正确打印。 首先,可以打印使用 .NET 图形类绘制的 Windows 窗体控件 (也即该控件不是 Win32 或 ActiveX 控件的封装)。 要选择最适合的绘制 Windows 窗体控件的方法,就使用 WinControlContainer.DrawMethod 属性,此属性设置绘制方法。 也可以使用 WinControlContainer 的 HtmlItemCreated 和 Draw 事件,从而以任何所需的方式来绘制 Windows 窗体控件。
其次,对于某些 Windows 窗体控件,XtraPrinting 库包含了特殊的类,这些类是 Link 类的子类,并且这些类实现了所有在 XtraReports 中绘制这些控件的必需的方法。 下列控件有 links:DataGrid、TreeView 和 ListView。XtraReport 类使用适当的 link 在预览窗口 (以及打印机) 和 Web 浏览器中绘制 Windows 窗体控件。
注意 |
---|
也可以在 XtraReports 中使用 DevExpress 控件。 例如 DevExpress 的 XtraGrid、XtraPivotGrid 和 XtraTreeList 控件 (有 XtraPrinting links)。 如果您有这些控件,那么可以在 XtraReports 中自由使用。 |
把 Windows.Forms 控件插入报表中 (运行时刻示例)
要把 Windows 窗体控件插入到报表中,首先要创建一个 WinControlContainer 对象,然后把之前创建的 Windows 窗体控件的引用,指派到 WinControlContainer.WinControl 属性。 然后,把所创建的 WinControlContainer 对象添加到 报表带区。 下面的代码举例说明了如何把一个 System.Windows.Forms.MonthCalendar 对象插入到报表中。
首先,在 XtraReport1 类中定义下述 AddWinControl 方法。
C# | 复制代码 |
---|---|
using System.Drawing; using DevExpress.XtraReports.UI; // ... public void AddWinControl(System.Windows.Forms.Control wrappedControl, Point location, Size controlSize){ // creating a WinControlContainer object WinControlContainer winControlContainer1 = new WinControlContainer(); // setting its location and size winControlContainer1.Location = location; winControlContainer1.Size = controlSize; // set a wrappedControl as a wrapped object winControlContainer1.WinControl = wrappedControl; // adding a WinControlContainer object to the Detail band of the report Detail.Controls.Add(winControlContainer1); } |
Visual Basic | 复制代码 |
---|---|
Imports System.Drawing Imports DevExpress.XtraReports.UI ' ... Public Sub AddWinControl(ByVal wrappedControl As System.Windows.Forms.Control, _ ByVal location As Point, ByVal controlSize As Size) ' creating a WinControlContainer object Dim winControlContainer1 As WinControlContainer = New WinControlContainer() ' setting its location and size winControlContainer1.Location = location winControlContainer1.Size = controlSize ' set a wrappedControl as a wrapped object winControlContainer1.WinControl = wrappedControl ' adding a WinControlContainer object to the Detail band of the report Detail.Controls.Add(winControlContainer1) End Sub |
然后创建一个 MonthCalendar 对象,并添加到所创建的报表中。
C# | 复制代码 |
---|---|
using System; using System.Drawing; using System.Windows.Forms; using DevExpress.XtraReports.UI; // ... // creating a MonthCalendar object and setting the new first day of the week MonthCalendar mnthCalendar = new MonthCalendar(); mnthCalendar.FirstDayOfWeek = Day.Monday; // creating a report XtraReport1 report = new XtraReport1(); // adding mnthCalendar to the Detail band of the report with the specified // Location and Size properties of a winControlContainer object report.AddWinControl(mnthCalendar, new Point(50, 20), new Size(200, 160)); // showing the report preview report.ShowPreview(); |
Visual Basic | 复制代码 |
---|---|
Imports System Imports System.DrawingImports System.Windows.Forms Imports DevExpress.XtraReports.UI ' ... ' creating a MonthCalendar object and setting the new first day of the week Dim mnthCalendar As New MonthCalendar() mnthCalendar.FirstDayOfWeek = Day.Monday ' creating a report Dim report As New XtraReport1() ' adding mnthCalendar to the Detail band of the report with the specified ' Location and Size properties of a winControlContainer object report.addWinControl(mnthCalendar, New Point(50, 20), New Size(200, 160)) ' showing the report preview report.ShowPreview() |
在下面的插图中显示了结果。