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

标签 c# winforms crystal-reports rdlc

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

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

enter image description here

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

enter image description here

最佳答案

生成并打印收据

您可以使用任何报表设计器工具(如 RDLC 报表或 Crystal 报表)生成报表。 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. 在第一列第一数据行(不是标题行)中,右键单击并选择 ProductName ( image )
  3. 选择第二列的标题并键入 UnitPrice/Quantity ( image )
  4. 在第二列第一数据行中,右键单击并选择Expression。 ( image )
  5. 在表达式窗口中,输入需要的表达式,例如:

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

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

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

  1. 从报表设计图面上的工具箱中拖放一个Table
  2. 在第一列第一数据行(不是标题行)中,右键单击并选择 ProductName ( image )
  3. 选择第二列的标题并键入 UnitPrice/Quantity ( image )
  4. 右键单击第一个数据行的行标题并选择Insert RowInside Group - Below ( image )
  5. 在第二列第一数据行中,右键单击并选择UnitPrice。 ( image )
  6. 单击[UnitPrice],然后按Home 并键入UnitPrice: ( image )
  7. 对组中的下一行中的数量执行相同的操作。
  8. 如果您需要组中的另一行,请重复第 3 步。 您可以设置单元格的边框,方法是选择它们并分别为顶部、左侧、底部和右侧设置 BorderStyle

下载

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

关于c# - 如何在winform应用程序中生成产品收据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55454073/

相关文章:

c# - 这两种从 Excel 读取字符串的调用/方法有什么区别?

c# - Crystal Reports 与 css .net 冲突

delphi - 如何在 Delphi 2007 应用程序中显示 Crystal XI 报告?

c# - 从 ajax 数据创建的下拉列表中绑定(bind)数据

c# - 来自 Windows 窗体的 MVC WebAPI 身份验证

javascript - 在文本框中按下 Enter 键时,重定向到 page.aspx

c# - 如何在C# windows窗体中创建与在线mysql数据库的连接?

c# - 使用 List<string> 填充组合框

c# - Winforms - MVP 模式 : Using static ApplicationController to coordinate application?

asp.net - IIS的Crystal Report问题-(bobj未定义,Crystal报表不显示)