打印发票 C# Winforms

8
我用C#编写了一个应用程序,现在我想打印它的内容,以发票的形式显示,如图所示。我只想打印客户数据一次,但是他要求在数据网格视图中显示的工作应该以列表的形式出现,并在发票末尾列出劳动力和总劳动力。
有些人建议使用水晶报表,但我从未使用过它们,因此正在寻找更简单的解决方案。简言之,我们如何从表单中打印所需的值?alt text

类似Crystal Reports的工具可能是您最好的选择。市面上还有其他报表工具可供选择,Telerik也有一些(但它们价格较高)。 - ChrisF
但是VS 2010没有水晶报表,而且当需要在没有VS 2010的客户端机器上发布此软件时,可能需要安装水晶报表,这有点麻烦...你知道的。 - Afnan Bashir
1
我使用http://www.devexpress.com/Products/NET/Printing/index.xml?tab=features,非常简单,但是需要150美元。 - Luke Hutton
1
谷歌搜索“打印DataGridView”,选择第一个结果。 - Hans Passant
3个回答

7
最简单、最快捷的解决方案是使用Visual Basic PowerPack的PrintForm控件(您也可以在C#项目中使用它)。
只需将控件拖放到您的表单上,然后从代码中调用即可。 http://msdn.microsoft.com/en-us/vbasic/bb735936.aspx
printForm1.Print();

这将打印表单上的所有内容,因此只需在表单上设计报告,然后调用该代码即可完成。


我的应用程序重新分发怎么样?需要安装吗? - Afnan Bashir
你可以将dll文件与应用程序一起部署,或者使用附带的引导程序包,在单击一次或设置项目中轻松重新分发它们。这非常小而简单,请参阅我的答案中的链接以获取更多信息。 - theChrisKent
这将直接打印而无需显示预览,我该如何添加预览控件?!! - Mȍhǟmmǟd Șamȋm
1
printForm1 的属性窗口中,将 PrintAction 属性设置为 PrintToPreview,找到答案并在此分享给其他人。 - Mȍhǟmmǟd Șamȋm

3
您可以使用本地的SSRS报表(.rdlc扩展名)。在“Reporting”下应该有一个新的项目模板用于创建报表。报表在Winforms中使用报表查看器控件显示(该控件也可以在WPF应用程序中使用WindowsFormsHost)。唯一的缺点是必须安装一个必需的依赖项与您的应用程序一起安装。 这里是2010年报表查看器的可再分发包。 另外一个优点是,如果/当需要从浏览器查看报告时,报告可以很容易地托管在SSRS实例中。查看器还可以渲染在SSRS实例中托管的本地报告。
根据用于填充报告的数据源,网络上有很多使用报告查看器的指南。以下示例使用通用列表作为数据源。“新的ReportDataSource”行中的“labels”必须与报表定义中数据集的名称相同。通用对象的属性也必须与数据集的列名匹配。
    public ReportViewer(IEnumerable<UnprocessedLabel> labels)
    {
        InitializeComponent();

        var reportViewer = new Microsoft.Reporting.WinForms.ReportViewer { ProcessingMode = ProcessingMode.Local };
        reportViewer.LocalReport.ReportPath = System.IO.Path.GetDirectoryName(Application.ResourceAssembly.Location) + "\\UnprocessedPalletLabel.rdlc";
        var ds = new ReportDataSource("labels", labels);
        reportViewer.LocalReport.DataSources.Add(ds);
        reportViewer.RefreshReport();
    }

3
上次我需要从C#表单中打印一些字段时,我只是使用“Bitmap”和“Graphics”对象创建了一个位图图像,并使用“PrintDocument”将其打印出来。
打印报告的布局是通过指定要打印的元素的坐标在代码中完成的。这种方法简单粗暴,但有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接