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