VisualStudio2005に含まれているCrystalReportsを使用しています。理想的には、実行時にレポートに表示される画像を変更するには、画像ファイルへのパスを作成してから、その画像をレポートに表示します。
このバージョンのCrystalReportsでこれを達成できた人はいますか?
仕事では、画像をデータテーブルのフィールドとしてレポートにプッシュすることでこれを行います。それはきれいではありませんが、それは仕事を成し遂げます。もちろん、このソリューションでは、DataSetを介してデータをレポートにプッシュする必要があります。私はいつもこれがせいぜいハックだと感じていました。画像パラメータがCRで可能であったことを本当に望んでいます。
編集: Crystalレポートをプレーンな古いオブジェクトにバインドしている場合は、レポートのbyte []プロパティを公開してそれを画像として処理する必要があることに注意してください。
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になります。実行すると、画像が表示されます。
私もこの質問をしました(そしてあなたの質問に投票しました)!
[それ以来、C#オブジェクトプロパティを介してバイト配列を使用する解決策を見つけました。別の回答を参照してください。この答えを参考のためにここに残します...]
これが私が提案したものです(しかし、C#-2005とC#-2008の両方で試して失敗しました)。
私はこのアプローチで運がなかった。フォームを最初にデザインしたときに画像が表示されます(ステップ2)。しかし、実行時に、イメージは更新されません。この時点から、物事は本当に奇妙になります。 CRは、消えないある種の画像をキャッシュしているようです。 CR-DesignerでOLEオブジェクトリンクを削除できますが、再作成すると、画像のサイズを変更しても、常に元の画像と同じサイズのブラックボックスが表示されます。 bmp)。
Visual Studio2015で使用しているCrystalReportsの現在のバージョン(Visual Studio 2012以降用)は、この機能をサポートしています。次の手順に従います。
数式ウィンドウが開きます。あなたの写真をリンクとして見つける式を入力してください。
if({@ isDonor} = "1")then " http://www.ny.org/images/aaf/picture1.jpg " else " http:// www。 ny.org/images/aaf/picture2.jpg " これで完了です。
条件式を使用して、画像の場所を設定することもできます。 Crystal Reports:Dynamic Images を参照してください。
私が便利だと思ったもう1つのオプションは、使用したい写真を挿入することです。それに応じてグラフィックを配置し、グラフィックを右クリックして、[グラフィックのフォーマット]> [共通]に移動します。 [抑制]チェックボックスをオンにして、x-2と表示されている数式ボタンをクリックします。数式ウィンドウが表示されたら、グラフィックを非表示にするかどうかを決定するためのコードを追加するだけです。
私の場合、複数のエンティティに対して1つの請求書テンプレートを作成していました。数式ウィンドウで、COMPANY <> 1100と書いただけです。つまり、1100以外の会社の請求書が実行されるたびに、1100のグラフィックが抑制されます。
うまくいけば、これは人生を楽にする...
画像のパスを含むパラメータとこのページのチュートリアルを組み合わせて使用してみてください: http://www.idautomation.com/crystal/streaming_crystal.html
次に、手順8で、ハードコードされたパスの代わりにパラメーターを使用します。
Joshが言ったように..データセットを使用して画像をプッシュする必要があります。または、イメージをデータベーステーブルに一度入れて、サブレポートを使用して何度もプルします。