C#中集成Crystal Reports创建条形码标签系统

在零售业中,条形码标签系统在销售点(POS)软件中扮演着至关重要的角色。尽管尝试了Google搜索和在CodeProject上寻找条形码生成器,但未找到满意的结果。因此,创建了一个使用C#和Crystal Reports的应用程序来生成可打印和可扫描的条形码。本文将涵盖以下内容:

  • C#中集成Crystal Reports。
  • Crystal Reports中使用数据集。
  • 在Crystal Reports中生成条形码。
  • 为多列格式化详细信息部分。
  • 创建条形码标签系统,减少代码工作量。

C#中的条形码标签系统

本文将分为以下几个部分:

  1. C#中创建项目。
  2. 向项目中添加Crystal Report。
  3. 为多列格式化详细信息部分和页面属性。
  4. 向表单添加详细信息。
  5. 向项目中添加数据集。
  6. 将数据集与Crystal Reports结合。
  7. 向报告中添加详细信息。
  8. 详细信息的对齐。
  9. 条形码简介。
  10. 向报告中添加条形码。
  11. 编码。
  12. 常见问题解答(FAQ)。
  13. 错误排除。

首先,打开Visual Studio并创建一个带有所需框架的项目。填写详细信息后点击OK。

右键点击项目,导航至 -> 添加 -> 新建项... 选择Crystal Report并为其指定一个名称,比如 'BarcodeReport.rpt'。点击添加。选择空白报告并点击OK。

在Crystal Reports菜单中,导航至 -> 报告 -> 部分专家。选择详细信息并勾选 '使用多列格式化(直到能看到布局标签)'。导航至布局标签并按需填写详细信息。

按下调试(F5)并确保项目在空表单中运行... 如果有错误,则按照下面的步骤操作或跳过下一个步骤:

例如:缺少程序集引用

打开项目的属性。如果目标框架是.NET Framework 4客户端,则将其更改为.NET Framework 4并点击是。按下调试(F5),错误应该会被修正。如果没有,请评论。

对表单进行基本更改。将Crystal Report查看器拖放到表单上。

可能已经注意到有一个单独的列用于条形码和商店详细信息,将在下面的FAQ部分讨论这个问题。

像添加Crystal Report一样打开添加项。选择数据集,给它一个名称,然后按添加。让给它一个名称 'Barcodes'。拖放一个数据表并重命名数据表并添加列。

打开报告中的数据库专家。将创建的数据集添加到报告中。点击OK。现在可以看到数据库字段中的数据集详细信息。

拖放详细信息到报告中。

使详细信息看起来像这样:

在生成条形码之前,应该了解条形码是什么以及如何使用它... 尝试在互联网上搜索更多详细信息。

注意:必须声明条形码的起始点和结束点,以便扫描器知道条形码从哪里开始和结束。在本文中,将使用 'Code39' 字体(IDAutomationHC39M),一个true-type字体。起始和停止可以用 '*(The Value)*' 表示。下面是一个示例。

让要编码的值为ABC123。条形码必须有值 '*ABC123*',其中(*)是起始和停止点。可以在这里获得更多详细信息。

上面有一个链接可以下载字体文件(源代码和演示中也包括了)。将条形码数据字段添加到报告中并按如下所示排列,并选择字体。

保存报告并关闭它。

这个应用程序使用了简单的代码,并且很容易翻译成其他.NET语言。

Barcodes barcodeDetails = new Barcodes(); DataTable dataTable = barcodeDetails._Barcodes; BarcodeReport Report = new BarcodeReport(); int blank_labels = 0; int numberofLabel = 6; for (int i = 0; i < numberofLabel; i++) { DataRow drow = dataTable.NewRow(); string P_name = "DETAIL" + i.ToString(); if (blank_labels <= i) { drow["Barcode"] = "*"; drow["Barcode"] += P_name; drow["Barcode"] += "*"; drow["ProductId"] = P_name; drow["Product Name"] = "Details of " + i.ToString(); drow["Cost"] = "Rs 110" + i.ToString() + "/-"; drow["Code"] = "ABCDE" + i.ToString(); drow["ShopName"] = "Shop Name"; } dataTable.Rows.Add(drow); } Report.Database.Tables["Barcodes"].SetDataSource((DataTable)dataTable); crystalReportViewer1.ReportSource = Report; crystalReportViewer1.Refresh();

上述代码易于理解。一个整数用于告诉空白标签的数量,以便可以将详细信息留空。一个整数用于告诉要生成的标签总数。一个for循环用于循环数据。一个数据行使用创建的数据表(数据集)。检查空白标签的数量(标签数量)。向数据行添加详细信息,包括条形码字段的起始和停止。将数据行添加到数据表中。最后,将其添加到报告中并刷新报告查看器。最后会得到类似这样的东西:

为什么在报告查看器中看不到条形码?

通常使用Open Type字体(.otf),改用True Type字体(.ttf)。

为什么在数据集中使用商店名称,而不是像参数一样在报告中使用?

在空白标签的情况下,不能在其中打印任何东西。

得到了一个错误,该怎么办?如果使用的是.NET 4.0,有些人可能会遇到这样的错误。用下面的行替换app.config文件:

<?xml version="1.0"?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" /> </startup> </configuration>

错误应该会被修正。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485