我正在使用VisualStudio 2005附带的Crystal Reports。我想在运行时更改报表上显示的图像,理想情况是通过构建图像文件的路径,然后在报表上显示该图像。 / p>
有没有人能够使用此版本的Crystal Reports实现此目的?
答案 0 :(得分:7)
在工作中,我们通过将图像作为数据表的字段推送到报表中来完成此操作。它不漂亮,但它完成了工作。当然,此解决方案要求您通过DataSet将数据推送到报表中。我一直认为这是一个充其量的黑客。我真的希望图像参数是CR的可能性。
编辑:值得注意的是,如果您将水晶报表绑定到普通旧对象,则需要为报表公开byte []属性,以将其视为图像。
答案 1 :(得分:2)
我也有这个问题(并投票给你了)!
[我已经找到了一个通过C#Object属性使用字节数组的解决方案 - 请参阅单独的答案。将此答案留在此处以供参考......]
这是我所看到的建议(但我在C#-2005和C#-2008都试过并失败了。)
我对这种方法没有运气。第一次设计表格时会出现图像(步骤2)。但在运行时,图像不会为我更新。从现在开始, 事情变得非常奇怪 。似乎CR缓存某种不会消失的图像。我可以删除CR-Designer中的OLE对象链接,但如果我重新创建它,我总会得到一个与原始图像大小相同的黑盒子(即使我改变了image.bmp的大小)。
答案 2 :(得分:2)
我终于使用Josh发布的byte[]
提示达成了解决方案。
如果您使用普通的旧C#对象来填充Crystal Reports,则此解决方案适用(有关此方法的信息,请参阅http://www.aspfree.com/c/a/C-Sharp/Crystal-Reports-for-Visual-Studio-2005-in-CSharp/)。
在C#类中,插入以下代码:
private static byte[] m_Bitmap = null;
public byte[] Bitmap
{
get
{
FileStream fs = new FileStream(bitmapPath, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
int length = (int)br.BaseStream.Length;
m_Bitmap = new byte[length];
m_Bitmap = br.ReadBytes(length);
br.Close();
fs.Close();
return m_Bitmap;
}
}
现在,使用“验证数据库”选项更新CR中的C#对象映射。然后,您应该将Bitmap
属性视为CR字段。只需将其拖到表单上即可。它的类型为IBlobFieldObject。当你跑步时,你应该看到你的形象。
答案 3 :(得分:1)
尝试结合使用包含图片路径的参数和此页面上的教程:http://www.idautomation.com/crystal/streaming_crystal.html
然后在步骤#8中,使用参数而不是硬编码路径。
答案 4 :(得分:1)
您还可以使用条件公式来设置图像的位置。请参阅Crystal Reports: Dynamic Images。
答案 5 :(得分:1)
我发现有用的另一个选项是插入您想要使用的图片。相应地定位图形,然后右键单击图形并转到格式图形>共同。选中Suppress框,然后单击公式按钮,显示为x-2。进入公式窗口后,只需添加代码以确定是否应该抑制图形。
就我而言,我正在为多个实体构建一个发票模板。在公式窗口中,我只写了COMPANY<> 1100意味着每次为1100以外的公司运行发票时,1100图形将被抑制。
希望这会让生活更轻松......
答案 6 :(得分:0)
就像Josh说的那样..你必须用数据集来推动图像。或者,将图像放入数据库表一次,并使用子报表多次拉出它。
答案 7 :(得分:0)
我与Visual Studio 2015一起使用的Crystal Reports的当前版本(适用于Visual Studio 2012+)支持此功能。请执行以下步骤:
将打开一个公式窗口。输入公式,将您的图片作为链接。
if({@ isDonor} =“ 1”) 然后是“ http://www.ny.org/images/aaf/picture1.jpg” 其他“ http://www.ny.org/images/aaf/picture2.jpg” 完成了!