VisualStudio 2005 に含まれている Crystal Reports を使用しています。実行時にレポートに表示される画像を、理想的には画像ファイルへのパスを作成して変更し、その画像をレポートに表示したいと考えています。
このバージョンの Crystal Reports でこれを達成できた人はいますか?
VisualStudio 2005 に含まれている Crystal Reports を使用しています。実行時にレポートに表示される画像を、理想的には画像ファイルへのパスを作成して変更し、その画像をレポートに表示したいと考えています。
このバージョンの Crystal Reports でこれを達成できた人はいますか?
職場では、画像をデータテーブルのフィールドとしてレポートにプッシュすることでこれを行います。それはきれいではありませんが、仕事を成し遂げます。もちろん、このソリューションでは、DataSet を介してデータをレポートにプッシュする必要があります。これはせいぜいハックだといつも感じていました。CRで画像パラメータが可能になることを本当に願っています。
編集: Crystalレポートを単純な古いオブジェクトにバインドしている場合、レポートがそれを画像として扱うためにbyte []プロパティを公開する必要があることに注意してください。
私もこの質問をしました(そしてあなたに投票しました)!
[それ以来、C# オブジェクト プロパティを介してバイト配列を使用する解決策を見つけました - 別の回答を参照してください。参照用にこの回答をここに残します...]
これが私が提案したことです(ただし、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 になります。実行すると、イメージが表示されます。
条件式を使用して画像の場所を設定することもできます。Crystal Reports: 動的画像を参照してください。
画像のパスを含むパラメーターとこのページのチュートリアルを組み合わせて使用してみてください: http://www.idautomation.com/crystal/streaming_crystal.html
次に、手順 8 で、ハードコードされたパスの代わりにパラメーターを使用します。
ジョシュが言ったように..データセットで画像をプッシュする必要があります。または、画像を一度データベース テーブルに配置し、サブレポートで何度も取得します。