【发布时间】:2010-09-12 19:07:07
【问题描述】:
我正在使用 VisualStudio 2005 中包含的 Crystal Reports。我想更改在运行时显示在报表上的图像,最好是通过构建图像文件的路径,然后让该图像显示在报表上。
有人能用这个版本的 Crystal Reports 做到这一点吗?
【问题讨论】:
标签: image crystal-reports report
我正在使用 VisualStudio 2005 中包含的 Crystal Reports。我想更改在运行时显示在报表上的图像,最好是通过构建图像文件的路径,然后让该图像显示在报表上。
有人能用这个版本的 Crystal Reports 做到这一点吗?
【问题讨论】:
标签: image crystal-reports report
尝试结合使用包含图像路径的参数和此页面上的教程:http://www.idautomation.com/crystal/streaming_crystal.html
然后在第 8 步中,使用参数而不是硬编码路径。
【讨论】:
我也有这个问题(并且投了你的票)!
[我已经通过 C# Object 属性找到了使用字节数组的解决方案 - 请参阅单独的答案。将此答案留在这里以供参考...]
这是我看到的建议(但我在 C#-2005 和 C#-2008 中都尝试过但失败了)。
我对这种方法没有运气。当我第一次设计表单时出现图像(第 2 步)。但在运行时,图像不会为我更新。从现在开始,事情变得非常奇怪。似乎 CR 缓存了某种不会消失的图像。我可以在 CR-Designer 中删除 OLE 对象链接,但如果我重新创建它,我总是会得到一个与原始图像大小相同的黑框(即使我更改了 image.bmp 的大小)。
【讨论】:
在工作中,我们通过将图像作为数据表的字段推送到报告中来做到这一点。它不漂亮,但它完成了工作。当然,此解决方案要求您通过 DataSet 将数据推送到报表中。我一直觉得这充其量只是一个hack。我真的希望图像参数是 CR 的可能性。
编辑:值得注意的是,如果您将水晶报表绑定到普通旧对象,您希望为报表公开一个 byte[] 属性以将其视为图像。
【讨论】:
就像 Josh 说的那样。您必须使用数据集推送图像。或者,将图像一次放入数据库表中,然后使用子报表将其多次拉入。
【讨论】:
我终于使用 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 类型。运行时,您应该会看到自己的图像。
【讨论】:
您还可以使用条件公式来设置图像的位置。见Crystal Reports: Dynamic Images。
【讨论】:
我发现另一个有用的选项是插入您想要使用的图片。相应地定位图形,然后右键单击图形并转到设置图形格式 > 通用。选中 Suppress 框,然后单击公式按钮,如 x-2 所示。进入公式窗口后,只需添加确定图形是否应被隐藏的代码。
就我而言,我正在为多个实体构建一个发票模板。在公式窗口中,我只写了 COMPANY 1100,这意味着每次为 1100 以外的公司运行发票时,都会隐藏 1100 图形。
希望这能让生活更轻松......
【讨论】:
我在 Visual Studio 2015 中使用的当前版本的 Crystal Reports(适用于 Visual Studio 2012+)支持此功能。请按照以下步骤操作:
将打开一个公式窗口。输入一个公式,将您的图片作为链接查找。
如果({@isDonor}="1") 然后“http://www.ny.org/images/aaf/picture1.jpg” 否则“http://www.ny.org/images/aaf/picture2.jpg” 你就完成了!
【讨论】: