2008-09-24 70 views
11

Tôi đang sử dụng Crystal Reports kèm theo VisualStudio 2005. Tôi muốn thay đổi hình ảnh được hiển thị trên báo cáo lúc chạy lý tưởng bằng cách tạo đường dẫn đến tệp hình ảnh và sau đó có hình ảnh được hiển thị trên báo cáo.Tự động thay đổi hình ảnh trong Báo cáo tinh thể khi chạy

Có ai có thể thực hiện điều này với phiên bản Crystal Reports này không?

Trả lời

7

Tại nơi làm việc, chúng tôi thực hiện việc này bằng cách đẩy (các) hình ảnh vào báo cáo dưới dạng các trường có thể đặt dữ liệu. Nó không đẹp, nhưng nó hoàn thành công việc. Tất nhiên, giải pháp này yêu cầu bạn đẩy dữ liệu vào các báo cáo thông qua một DataSet. Tôi đã luôn luôn cảm thấy đây là một hack tốt nhất. Tôi thực sự mong rằng các tham số hình ảnh là một khả năng với CR.

Chỉnh sửa: Cần lưu ý rằng nếu bạn đang ràng buộc báo cáo tinh thể của mình với các đối tượng cũ đơn giản, bạn muốn hiển thị thuộc tính byte [] cho báo cáo để coi đó là hình ảnh.

+0

Tôi đang sử dụng lớp C# cho mỗi www.aspfree.com/c/a/C-Sharp/Crystal-Reports-for-Visual-Studio-2005-in-CSharp/. Tôi có một báo cáo phức tạp, tùy chỉnh được vẽ với hàng trăm trường. Tôi không thấy một con đường tốt từ đây đến đó. Tôi đã xem: codeguru.com/csharp/.net/net_general/toolsand3rdparty/article.php/c13253. –

+0

Nếu bạn đang ràng buộc một Crystal Report với các đối tượng cũ đơn giản, chỉ cần trưng ra một thuộc tính byte []. CR sẽ thấy đó là một hình ảnh. –

+0

Eureka! Tôi đã thử một "Bitmap" tài sản, nhưng đã không chạy qua byte [] CR lừa trong việc đọc tôi đã làm. –

1

Hãy thử sử dụng một sự kết hợp của việc sử dụng một tham số có chứa đường dẫn của hình ảnh và hướng dẫn trên trang này: http://www.idautomation.com/crystal/streaming_crystal.html

Sau đó, trong bướC# 8, sử dụng tham số thay vì một con đường mã hóa cứng.

+0

Cảm ơn nhưng giải pháp này dành cho phiên bản mới hơn của Crystal hơn là chúng tôi đang sử dụng. Chúng tôi không có nút Vị trí đồ họa trong các thuộc tính điều khiển hình ảnh. – Keith

+0

yep, điều này sẽ chỉ hoạt động trong CR 11 trở lên. – dotjoe

+0

Không giống như @Keith khác - Tôi đang sử dụng CR 11.5 và tuyến đường đó vẫn không hoạt động. Hình ảnh không bao giờ thay đổi từ bản gốc. – Keith

2

Tôi cũng có câu hỏi này (và đã bỏ phiếu cho bạn)!

[Tôi đã tìm thấy giải pháp sử dụng mảng byte thông qua thuộc tính đối tượng C# - xem Câu trả lời riêng biệt. Để lại câu trả lời này ở đây để tham khảo ...]

Đây là những gì tôi đã thấy gợi ý (nhưng tôi đã thử và thất bại trong cả C# -2005 và C# -2008).

  1. Chọn thư mục và đặt BMP ở đó (ví dụ: "C: \ Temp \ image.bmp").
  2. Từ CR-Designer a) Nhấp chuột phải-> Chèn-> Đối tượng OLE ... b) Chọn "Tạo từ tệp" c) Đánh dấu vào hộp kiểm "Liên kết" d) Duyệt và chọn bmp được xác định trong bước 1 e) Nhấp OK f) Đặt hình ảnh trên biểu mẫu.
  3. Ghi đè/cập nhật hình ảnh khi chạy trong mã C# của bạn. Về lý thuyết, vì bạn đã chèn Liên kết vào tệp hình ảnh, tệp sẽ được cập nhật khi biểu mẫu được làm mới.

Tôi không có may mắn với cách tiếp cận này. Hình ảnh xuất hiện khi lần đầu tiên tôi thiết kế biểu mẫu (bước 2). Nhưng khi chạy, hình ảnh không cập nhật cho tôi. Từ thời điểm này trở đi, mọi thứ trở nên thực sự lạ. Có vẻ như CR lưu trữ một số loại hình ảnh mà sẽ không biến mất. Tôi có thể xóa liên kết đối tượng OLE trong CR-Designer, nhưng nếu tôi tạo lại nó, tôi luôn nhận được một hộp đen có cùng kích thước với hình ảnh gốc (ngay cả khi tôi thay đổi kích thước của image.bmp).

+0

không chắc chắn tùy chọn "liên kết" là gì. Tôi luôn nghĩ rằng chèn sẽ nhúng hình ảnh vào báo cáo. – dotjoe

+0

Theo trợ giúp "Tính năng này" cho hộp kiểm đó, bạn có thể chọn nhúng hình ảnh hoặc liên kết tới hình ảnh đó. Tôi thu thập nó là tương tự như một cửa sổ "phím tắt" vào một tập tin (hoặc một liên kết hệ thống tập tin trong Unix). Nếu nó không nhúng hình ảnh, nó chắc chắn có vẻ như nó sẽ làm việc. –

+0

Lỗi tương tự trong VB.NET VS 2010, @ e-holder - Hình ảnh gốc luôn luôn ở lại. – Keith

0

Giống như Josh đã nói .. Bạn sẽ phải đẩy hình ảnh bằng tập dữ liệu. Hoặc, đưa hình ảnh vào một bảng cơ sở dữ liệu một lần và kéo nó trong nhiều lần với một subreport.

2

Cuối cùng tôi đã đạt được giải pháp sử dụng mẹo byte[] được đăng tại đây bởi Josh.

Giải pháp này áp dụng nếu bạn đang sử dụng một đối tượng C# cũ để điền các báo cáo Crystal của bạn (xem http://www.aspfree.com/c/a/C-Sharp/Crystal-Reports-for-Visual-Studio-2005-in-CSharp/ để biết thông tin về cách tiếp cận này).

Trong lớp # C của bạn, chèn đoạn mã sau:

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; 
    } 
} 

Bây giờ, cập nhật C# Object Mapping của bạn trong CR sử dụng "Xác minh Cơ sở dữ liệu" tùy chọn. Sau đó, bạn sẽ thấy thuộc tính Bitmap làm trường CR. Chỉ cần kéo nó vào biểu mẫu. Nó sẽ thuộc loại IBlobFieldObject. Khi bạn chạy, bạn sẽ thấy hình ảnh của bạn.

+0

Điều này sẽ được thực hiện như thế nào trong VB.NET? – Keith

+0

Đã một thời gian dài kể từ khi tôi đã sử dụng Crystal hoặc VB. Không biết tôi có thể giúp gì không. Phần nào trong số này là bạn cần trợ giúp dịch sang VB? Mảng byte? Các luồng/độc giả? Bất động sản? Ánh xạ đối tượng trong CR? –

+0

Hầu như toàn bộ mọi thứ, nhưng không sao, cuối cùng tôi chỉ sử dụng Microsoft Reports và hình ảnh động đã hoạt động hoàn hảo. 11,5 Crystal Reports có vẻ giống như một mảnh crap khi nói đến tùy chọn Graphic Location. Nó hoàn toàn bỏ qua bất cứ điều gì bạn đặt trong đó. Tất cả các giải pháp mà tôi đã tìm thấy trực tuyến cho CR, đều dành cho các phiên bản cũ hơn. Cảm ơn bạn rất nhiều vì đã trả lời bài đăng cũ. – Keith

1

Bạn cũng có thể sử dụng công thức có điều kiện để đặt vị trí của hình ảnh. Xem Crystal Reports: Dynamic Images.

+0

liên kết của bạn trống: ( – programmerist

+0

Kỳ lạ.Nó phải là một điều WordPress. Nó hoạt dộng bây giờ. – craig

1

Một tùy chọn khác mà tôi thấy hữu ích là chèn hình ảnh bạn muốn sử dụng. Định vị đồ họa cho phù hợp, sau đó nhấp chuột phải vào hình ảnh và chuyển đến Định dạng đồ họa> Chung. Chọn hộp Suppress, sau đó nhấp vào nút công thức, được hiển thị dưới dạng x-2. Khi ở trong cửa sổ công thức, chỉ cần thêm mã để xác định xem đồ họa có nên bị chặn hay không.

Trong trường hợp của tôi, tôi đã tạo một mẫu hóa đơn cho nhiều thực thể. Trong cửa sổ công thức, tôi đơn giản viết CÔNG TY <> 1100 có nghĩa là mỗi khi hóa đơn được chạy cho một công ty khác ngoài 1100, đồ họa 1100 sẽ bị chặn lại.

Hy vọng điều này giúp cuộc sống dễ dàng hơn ...

Các vấn đề liên quan