在运行时动态更改Crystal Report中的图像

时间:2008-09-24 16:36:06

标签: image crystal-reports report

我正在使用VisualStudio 2005附带的Crystal Reports。我想在运行时更改报表上显示的图像,理想情况是通过构建图像文件的路径,然后在报表上显示该图像。 / p>

有没有人能够使用此版本的Crystal Reports实现此目的?

8 个答案:

答案 0 :(得分:7)

在工作中,我们通过将图像作为数据表的字段推送到报表中来完成此操作。它不漂亮,但它完成了工作。当然,此解决方案要求您通过DataSet将数据推送到报表中。我一直认为这是一个充其量的黑客。我真的希望图像参数是CR的可能性。

编辑:值得注意的是,如果您将水晶报表绑定到普通旧对象,则需要为报表公开byte []属性,以将其视为图像。

答案 1 :(得分:2)

我也有这个问题(并投票给你了)!

[我已经找到了一个通过C#Object属性使用字节数组的解决方案 - 请参阅单独的答案。将此答案留在此处以供参考......]

这是我所看到的建议(但我在C#-2005和C#-2008都试过并失败了。)

  1. 选择目录并在那里放置BMP(例如,“C:\ Temp \ image.bmp”)。
  2. 从CR-Designer中a)右键单击 - >插入 - > OLE对象... b)选择“从文件创建”c)选中“链接”复选框d)浏览并选择在中定义的bmp步骤1 e)单击确定f)将图像放在表单上。
  3. 在C#代码中在运行时覆盖/更新映像。理论上,由于您将 链接 插入到图像文件中,因此在刷新表单时会更新它。
  4. 我对这种方法没有运气。第一次设计表格时会出现图像(步骤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+)支持此功能。请执行以下步骤:

  1. 将图片插入报告中。这将作为您的 占位符。”
  2. 右键单击您的图片,然后选择“设置对象格式” Right Click Image
  3. 选择“图片”选项卡,然后按公式按钮 Picture Tab
  4. 将打开一个公式窗口。输入公式,将您的图片作为链接。

    if({@ isDonor} =“ 1”) 然后是“ http://www.ny.org/images/aaf/picture1.jpg” 其他“ http://www.ny.org/images/aaf/picture2.jpgFormula Editor 完成了!