首先,我想描述一下我目前的情况。 我有一个RDLC,其数据来自使用存储过程“sp”的数据集“ds”。让我们说,从“ds”我可以得到一个名为“bar_code”的String类型的字段,然后可以在占位符中使用3of9字体组合生成条形码。
现在,我想获得相同的结果,但是使用另一种方法,给定一个字符串,将返回BMP或JPEG格式的条形码图像。此方法已在http://www.techrepublic.com/blog/howdoi/how-do-i-generate-barcodes-using-c/173中描述。
我的问题:是否可以在ReportViewer代码后面编写方法(.aspx.cs)? 如果可能,我如何将“bar_code”传递给此方法,然后将结果(JPEG或BMP)嵌入到RDLC中?
答案 0 :(得分:1)
我找到了答案。 我们可以通过从代码隐藏中调用DataSetTableAdapter来获取我们想要从存储过程转换为图像的值,用任何所需参数填充它,然后将结果存储在DataTable中。 之后,我们遍历每一行并将获得的值传递给生成BMP条形码的方法。关键是我们必须将此BMP存储在具有System.Byte []类型的列中,因此我们在DataTable中添加一个具有该类型的新列。如果我们将它存储在System.Object中,它将无法工作。 使用MemoryStream将图像保存到Byte []:
MemoryStream ms = new MemoryStream(); image_result.Save(ms,System.Drawing.Imaging.ImageFormat.Png);
然后,将我们的RDLC DataSource设置为使用新的DataTable,并在我们的RDLC中按Image类型添加占位符。
答案 1 :(得分:0)
您引用的那篇文章有关于如何从aspx生成条形码的信息。
缺少一小部分:您使用“BarcodeGenerator.aspx?data = 11111111”链接作为html中<img>
节点的'src'。
顺便说一句:在这种情况下,“gif”比“jpg”更好:jpg会导致不必要的瑕疵,使条形码难以扫描。 “bmp”通常太大了。
答案 2 :(得分:0)
您可以使用Barcode.dll barcode component它支持RDLC报告(网络和窗口)。
您只需要一个简单的RDLC代码选项卡方法:
在设计模式下打开Report.rdlc,从灰色字段的上下文菜单中选择“属性”: 一个。看一下“References”选项卡,在那里引用Barcode.dll,并实例化BarcodeFactory。 湾请注意,Barcode.dll必须在GAC中注册 - 安装程序会这样做。 C。看看“代码”选项卡,在那里定义了GetBarcode128方法。
看一下“ID”文本下面的图像控件,注意它的属性: MimeType“image / png” 来源“数据库” 值“= Code.GetBarcode128(Fields!Name.Value)”
下载包中包含RDLC样本。
答案 3 :(得分:0)
您可以将图像存储在数据集的byte []字段中,并使用rdlc报告上的图像控件显示该图像
另一个选项是创建一个新参数并以这种方式传递它。
如果它进入页脚的页眉,还有其他问题需要处理。然后你需要使用= Convert.ToBase64String(First(Fields!BarcodeImage.Value,“DataSet Name”))将它存储在文本框中,然后使用Convert.FromBase64String(ReportItems!NameOfYourTextBox.Value)将其显示在图像中
另请参阅http://www.codeproject.com/Articles/2434/Drawing-Barcodes-in-Windows-Part-1-Code-39了解如何生成图片。
我已经使用了这个并将图像作为流返回并将该流放入我的byte []列(或作为参数传递)以在报告上打印