使用 WinForms PrintDocument 构建 .NET 6 财务报表应用程序
Microsoft 最近为在 Visual Studio 2022 预览版中工作的开发人员发布了他们的 .NET 6 预览版环境(.NET 6 本身不能在 Visual Studio 2019 中工作)。随着 .NET 6 的发布,我们发布了自己的 .NET 6 控件,这将使您在最新版本的 WinForms 中工作的体验更加轻松。这次我们将学习如何使用 WinForms PrintDocument 控件创建年度财务报告。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--TUjUi-yV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://files .grapecity.com/gc-website-media/yejjdtsk/01-pd.png%3Fwidth%3D426.1939218523878%26height%3D500)
使用 PrintDocument 控件而不是我们的报告控件之一(例如 FlexReport)的主要优点之一是,使用 PrintDocument,您可以完全控制文档的整个呈现,包括放置项目的内容、位置和方式。 PrintDocument 控件中的每一行都是完全可自定义的。
与我们的其他报告控件相比,使用 PrintDocument 的开发人员开销稍多,但 PrintDocument 提供的自定义潜力是无与伦比的。我们可以创建任何我们想要的报告、图像、pdf、文本等,但我们已经为这个实际示例提供了年度财务报告。查找我们用于此示例的深入文档;请访问以下链接:https://www.grapecity.com/componentone/docs/win/online-printdocument/overview.html
首先,我们要打开 Visual Studio 2022 Preview,创建一个新的 .NET 6 WinForms 应用程序,然后转到 Visual Studio 工具菜单中的 NuGet 包管理器添加包 C1.Win.Printing (6.0.20213.530) 或更高。
接下来,我们要导航到 Form1.cs 设计器页面并打开 Visual Studio 工具箱以将 C1PrintDocument 控件和 C1PrintPreviewControl 添加到表单中。一旦 C1PrintDocument 和 C1PrintPreviewControl 都在表单上,我们将要单击 C1PrintPreviewControl 右上角的智能标记以将其停靠到父容器。

我们首先创建一个空白的 PrintDocument 对象:
C1PrintDocument doc = new C1PrintDocument();
进入全屏模式 退出全屏模式
接下来,我们需要数据。如果您有一个底层数据库,您想连接到 PrintDocument 控件。您可以通过 RenderObject 中的 DataBinding 属性执行此操作,该类型 C1DataBinding 允许您为呈现的对象显示的数据指定数据源。然后文档可以包含数据库模式,由 C1DataSchema 表示,并包括数据库连接信息,例如 SQL 查询等。文档中的 C1DataBinding 对象可以引用该模式的属性。或者,C1DataBinding 对象可以引用现有数据源,例如 DataTable 等,这些数据源是在表单上或创建 PrintDocument 的程序的其他位置创建的。为简单起见,在我们的示例中,我们将在应用程序中创建一个 RenderTable,为我们的 PrintDocument 提供数据。
我们将创建两个 RenderTables 对象,一个用于报告的“标题”和公司信息,第二个 RenderTable 将保存我们的实际数据。
// Create two RenderTable objects:
RenderTable rt = new RenderTable();
RenderTable rt1 = new RenderTable();
// Here we are utilizing our second RenderTable to create extra headers above our grid, and we have lines turned off by default so nothing shows.
rt1.Cells[0, 0].Text = "ANNUAL FINANCIAL REPORT";
rt1.Cells[1, 0].Text = "Enter Company Name Here";
rt1.Rows[0].Style.FontSize = 24;
rt1.Rows[1].Style.FontSize = 20;
进入全屏模式 退出全屏模式
对于包含数据的 RenderTable,我使用第一行设置列标题:
// add initial header data
rt.Cells[0, 0].Text = "METRIC";
rt.Cells[0, 1].Text = "THIS YEAR (2022)";
rt.Cells[0, 2].Text = "LAST YEAR (2021)";
rt.Cells[0, 3].Text = "% CHANGE";
进入全屏模式 退出全屏模式
然后我们手动设置每一行的数据如下:
// Row 1
rt.Cells[1, 0].Text = "Revenue";
rt.Cells[1, 1].Text = "$180,583.88";
rt.Cells[1, 2].Text = "$180,026.64";
rt.Cells[1, 3].Text = "0%";
进入全屏模式 退出全屏模式
风格
提供完所有数据后,就该设置 RenderTables 的样式属性了。我们要做的第一件事是为我们的第二个 RenderTable 打开网格线并添加一些填充以清楚地区分单独的数据行。
rt.Style.GridLines.All = LineDef.Default;
rt.CellStyle.Padding.All = "2mm";
进入全屏模式 退出全屏模式
我们还可以根据其中的数据将列和行设置为自动调整大小,而不是基于父页面宽度的默认值。
// 1) By default, table width is set to parent (page) width,
// for auto-sizing we must change it to auto (i.e. based on content):
rt.Width = Unit.Auto;
// 2) Set ColumnSizingMode to Auto (default means Fixed for columns):
rt.ColumnSizingMode = TableSizingModeEnum.Auto;
// that's it, now the table's columns will be auto-sized.
进入全屏模式 退出全屏模式
如果我们想对一系列行进行分组以便于操作,我们还可以使用 RenderTable 类中包含的不同集合来轻松访问整个 Row 样式甚至 RowGroups 集合。在下图中,我们使用 RowGroups.Header 属性将第一行专门标记为页眉和页眉。
// Add the first row as a header and make the text color white and bolded
rt.RowGroups[0, 1].Header = C1.C1Preview.TableHeaderEnum.Page;
rt.Rows[0].Style.TextColor = Color.White;
rt.Rows[0].Style.FontBold = true;
rt.RowGroups[0, 1].PageHeader = true;
// Change the header background color
rt.RowGroups[0, 1].Style.BackColor = Color.Green;
进入全屏模式 退出全屏模式
接下来,我们可以使用以下逻辑和 Rows.Count 属性为每隔一行添加不同的背景颜色:
for(int i = 1; i < rt.Rows.Count; i++)
{
if (i % 2 == 0)
{
rt.Rows[i].Style.BackColor = Color.White;
}
else
rt.Rows[i].Style.BackColor = Color.LightGray;
}
进入全屏模式 退出全屏模式
最后,我们可以将 RenderTables 添加到 PrintDocument 对象,然后将 PrintDocument 对象加载到 PrintPreview 控件中,只需几行代码:
// Add the tables to the document
doc.Body.Children.Add(rt1);
doc.Body.Children.Add(rt);
// Show the document
this.c1PrintPreviewControl1.Document = doc;
进入全屏模式 退出全屏模式
运行应用程序后,您可以直接从 PrintPreview 控件打印文件或通过“保存”图标将其导出为各种不同的文件格式,例如 PDF、.xlsx、.xls、.rtf 等。完整列表如下图所示:

在此处下载示例。
通过直接在我们的网站上下载我们的 30 天免费试用版,探索 ComponentOne PrintDocument 和 PrintPreview 控件的全部功能。
更多推荐

所有评论(0)