如何在winform应用程序中生成产品收据?

问题描述 投票:4回答:4

我是第一次在winform应用程序上工作,我有一个gridview,其中包含用户购买的产品列表。

我点击了一个打印按钮,允许用户生成如下收据:

enter image description here

所以在这里我很困惑我是否应该使用“winform默认RDLC或Crystal Report”,或者我是否应该生成PDF然后将其打印为收据,但我不确定PDF是否是收据生成的好选择。

对于Crystal Report,我已经读过我需要安装它,客户端(谁将使用这个桌面应用程序)必须安装Crystal Report,并且还有一些涉及Crystal Report的许可,我不想要。

另外,如果我使用Crystal Report,那么我不确定是否可以生成完全高于收据(带表格格式)并且它是否复杂?

收据有点复杂,所以有更好的工具或方式,或者我应该如何生成上面图片中显示的收据?

更新:打印纸总尺寸为:7.50厘米,用户希望打印中心的所有内容。

Discount = FinalAmount - MRP;

客户名称,手机号码,账单号码,付款方式值由用户自己输入表格。

我有一个Excel文件,其中包含产品列表,每个产品我都有ProductId,ProductName,MRP等信息,如CGST,SGST等税务信息。

用于根据产品ID从excel文件填充gridview的代码:

 using (OleDbConnection cnnxls = new OleDbConnection(strConn))
                    using (OleDbDataAdapter oda = new OleDbDataAdapter(query, cnnxls))
                    {
                        oda.Fill(dtProductList);
                        DataColumnCollection columns = dtProductList.Columns;
                        if (!columns.Contains("FinalAmount"))
                        {
                            dtProductList.Columns.Add(new DataColumn() { ColumnName = "FinalAmount", DataType = typeof(decimal) });
                        }

                        if (!columns.Contains("Quantity"))
                        {
                            dtProductList.Columns.Add(new DataColumn() { ColumnName = "Quantity", DataType = typeof(int) });
                        }
                        DataRow lastRow = dtProductList.Rows[dtProductList.Rows.Count - 1];
                        lastRow["FinalAmount"] = Convert.ToDecimal(lastRow["MRP"]);
                        lastRow["Quantity"] = 1;
                    }

enter image description here

c# winforms crystal-reports rdlc
4个回答
4
投票

生成并打印收据

您可以使用任何报表设计器工具(如RDLC Reports或Crystal Reports)生成报表。 RDLC报告已经足够好了。你可以print the RDLC report with or without showing the print dialog。你也可以轻松export the RDLC report manually or using the code

如果由于任何原因您不想使用报告工具,作为另一种选择,您可以考虑使用generating HTML report easily using Run-time T4 templates

使用RDLC报告,如何在单个单元格中显示多个字段

您可以轻松使用表达式在单个单元格中显示多个值。另外,作为另一个选项,您可以在单个行组中使用行,并在单个列中显示不同的字段。

示例1 - RDLC - 使用表达式在单个列中显示多个字段

以下步骤说明如何使用表达式在单个列中显示多个字段。我假设你已经设置了数据源,并有ProductNameUnitPriceQuantity字段。然后,按照下列步骤操作:

  1. 从报表设计图面上的工具箱中删除Table
  2. 在第一列中,第一个数据行(不是标题行),右键单击并选择ProductNameimage
  3. 选择第二列的标题并键入UnitPrice/Quantityimage
  4. 在第二列,第一个数据行,右键单击并选择Expression。 (image
  5. 在表达式窗口中,输入所需的表达式,例如: = "UnitPrice: " & Fields!UnitPrice.Value.ToString() & System.Environment.NewLine & "Quantitye: " & Fields!Quantity.Value.ToString()

示例2 - RDLC - 使用行组在单个列中显示多个字段

以下步骤说明如何在单个列中显示多个字段。我假设你已经设置了数据源,并有ProductNameUnitPriceQuantity字段。然后,按照下列步骤操作:

  1. 从报表设计图面上的工具箱中删除Table
  2. 在第一列中,第一个数据行(不是标题行),右键单击并选择ProductNameimage
  3. 选择第二列的标题并键入UnitPrice/Quantityimage
  4. 右键单击第一个数据行的行标题,然后选择qazxsw poi→qazxsw poi(qazxsw poi)
  5. 在第二列,第一个数据行,右键单击并选择Insert Row。 (Inside Group - Below
  6. 单击image,然后按Home并键入UnitPriceimage
  7. 对于数量,在组的下一行中执行相同操作。
  8. 如果组中需要另一行,请重复步骤3.您可以通过选择它们并分别为顶部,左侧,底部和右侧设置[UnitPrice]来设置单元格的边框。

下载

您可以在此处使用表达式克隆或下载示例:


1
投票

我之前使用的一种快速简便的方法是生成一个html页面,然后使用html2pdf库将其转换为pdf文件。

您也可以考虑这种方法,因为RDLC报告/ Crystal报告对您的案例可能过度。


1
投票

RDLC功能强大,而Crystal报表功能强大。您可以选择rdlc来消除许可成本。

使用RDLC

数据您需要将数据集BorderStyle或数据源添加到报告中,您将操作该报告以满足所需的设计和数据。

设计在设计上,您可以根据自己的喜好拖放控件。有一个挑战,有时你在设计上看到的可能不是你在最终输出上看到的,所以你需要测试很多。

打印您可以使用rdlc进行打印预览或直接发送到pdf查看器。 repository就是一个例子。

结论我认为如果您在报告中生成的数据很好,那么使用rdlc和crystal报告时,设计和布局不会有太大问题。

更新根据提供的进一步信息,我试图做一些可能接近你想要实现的事情。我已经使用水晶报告以及数据库表来模拟因为时间。否则,使用rdlc可以实现相同的目的。

样本表我创建了zip file

以下是数据库的示例查询和结果。我已经制作了可以通过水晶报告来容纳的小组。您可以使用相同的计算文本值来区分Tax信息和Transaction Memo。 Here

这是调整设计后的最终目标。页面布局也可以根据您的口味进行调整。

更新。对于RDLC,我认为您需要为备忘录数据和税务信息添加数据集。如果它接近,请看下面。我没有预览有没有安装的组件。 Here

enter image description here


1
投票

要在一个单元格中添加3列,您有两个选项:

1-使用新行表达式

enter image description here

2-在rdlc中使用子报告或分组之类的东西。

第一个选项接缝更容易

© www.soinside.com 2019 - 2024. All rights reserved.