为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
DIEA 2022-11-21 22:13:13

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

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

http://img2.sycdn.imooc.com/637b878e000194c702701087.jpg

所以在这里我很困惑我是否应该使用“winform default RDLC or 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;

                    }

http://img4.sycdn.imooc.com/637b879a00015bf506490282.jpg

查看完整描述

4 回答

?
噜噜哒

TA贡献1503条经验 获得超6个赞

生成并打印收据

您可以使用任何报表设计器工具(如 RDLC Reports 或 Crystal Reports)生成报表。RDLC 报告已经足够好了。您可以在显示或不显示打印对话框的情况下打印 RDLC 报告。您还可以轻松地手动或使用代码导出 RDLC 报告

如果出于任何原因您不想使用报告工具,作为另一种选择,您可以考虑使用运行时 T4 模板轻松生成 HTML 报告

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

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

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

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

  1. Tablefrom 工具箱放在报表设计图面上。

  2. 在第一列,第一个数据行(不是标题行)中,右键单击并选择ProductNameimage )

  3. 选择第二列的标题并键入UnitPrice/Quantity图像

  4. 在第二列第一数据行中,右键单击并选择Expression。(图片

  5. 在表达式窗口中,输入需要的表达式,例如:

    = "UnitPrice: " & Fields!UnitPrice.Value.ToString() & System.Environment.NewLine & "Quantitye: " & Fields!Quantity.Value.ToString()

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

以下步骤向您展示了如何在单个列中显示多个字段。我假设您已经设置了数据源并且有ProductName,UnitPriceQuantity字段。然后,按照下列步骤操作:

  1. Tablefrom 工具箱放在报表设计图面上。

  2. 在第一列,第一个数据行(不是标题行)中,右键单击并选择ProductNameimage )

  3. 选择第二列的标题并键入UnitPrice/Quantity图像

  4. 右键单击第一个数据行的行标题并选择Insert Row→ Inside Group - Below图像

  5. 在第二列第一数据行中,右键单击并选择UnitPrice。(图片

  6. 单击[UnitPrice],然后按Home并键入UnitPrice:图像

  7. 对组中的下一行中的数量执行相同的操作。

  8. 如果您需要组中的另一行,请重复步骤 3。您可以通过选择它们并BorderStyle分别设置顶部、左侧、底部和右侧来设置单元格的边框。


查看完整回答
反对 回复 2022-11-21
?
桃花长相依

TA贡献1553条经验 获得超8个赞

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

您也可以考虑这种方法,因为 RDLC 报告/Crystal 报告对您的情况来说可能有点矫枉过正。


查看完整回答
反对 回复 2022-11-21
?
繁华开满天机

TA贡献1523条经验 获得超4个赞

RDLC 和水晶报表一样强大。您可以选择在消除许可成本方面接近的 rdlc。

使用 RDLC

数据 您需要在此处添加数据集或数据源到您将操纵的报告以满足您想要的设计和数据。

设计 在设计上,您只需根据自己的喜好拖放控件。有一个挑战,有时您在设计中看到的可能与您在最终输出中看到的不同,因此您需要进行大量测试。

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

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

更新根据提供的更多信息,我尝试做一些可能接近您想要实现的事情。由于时间关系,我用过水晶报表和数据库表来模拟。否则同样可以使用 rdlc 实现。

我创建的示例表

//img1.sycdn.imooc.com/637b87b50001a36606550184.jpg

这是来自数据库的示例查询和结果。我创建了可以由水晶报告容纳的组。您可以使用相同的计算文本值来区分税务信息和交易备忘录。

//img1.sycdn.imooc.com/637b87c80001b83613820655.jpg

这是调整设计后的最终外观。页面布局也可以根据您的喜好进行调整。

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

//img4.sycdn.imooc.com/637b87d50001d87214010803.jpg

//img2.sycdn.imooc.com/637b87da00014ef105250684.jpg

查看完整回答
反对 回复 2022-11-21
?
繁花如伊

TA贡献0条经验 获得超1个赞

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

1- 使用换行表达式

=Fields!MyField1.Value + System.Environment.NewLine + Fields!MyField2.Value

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

第一个选项接缝更容易


查看完整回答
反对 回复 2022-11-21
  • 4 回答
  • 0 关注
  • 8 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信