私の名前は Ed です。ReportView ダイナミックから画像を読み込む必要があります。どうすればよいですか? 私は Windows フォーム、c# 3.0、および linq to sql を使用しています。レポート ダイナミックにイメージをロードする必要があります。
ありがとう。
私の名前は Ed です。ReportView ダイナミックから画像を読み込む必要があります。どうすればよいですか? 私は Windows フォーム、c# 3.0、および linq to sql を使用しています。レポート ダイナミックにイメージをロードする必要があります。
ありがとう。
この回答は非常に役に立ちます (レポートに「壊れた画像」ボックスがほとんど表示されなくなりました) が、少し誤解を招く可能性があります。
厳密に言えば、「イメージ」(実際にはバイト配列) が BMP 形式である必要はありません。テスト プロジェクトでは、ディスクから jpeg ファイルを読み取り (つまり、 File.ReadAllBytes(filename); )、結果のバイト配列を "rptrow" のリストの byte[] プロパティに追加することができました (ここで、rptrow は、レポート テーブルの 1 行のすべてのデータ)。レポートの画像には、MIMEType が「image/jpeg」に設定され、Source プロパティが「Database」に設定されていました。また、何かが指定されている限り (つまり、空白ではない)、どの MIMEType を使用してもかまわないことに気付きました。
急いでいたので、24bpp イメージでなければならないという記述を確認することさえ考えませんでした。
単純化された rptobj:
public class rptobj
{
public string FileName { get; set; }
public byte[] Photo { get; set; }
private List<rptobj> photos;
public List<rptobj> GetList()
{
if (photos == null)
{
photos = LoadPhotos();
}
return photos;
}
private List<rptobj> LoadPhotos()
{
var rslt = new List<rptobj>();
byte[] rawData;
var path = HttpContext.Current.Server.MapPath(@"~\images");
DirectoryInfo di = new DirectoryInfo(path);
FileSystemInfo[] fis = di.GetFileSystemInfos("*.jpg");
foreach(var fi in fis){
rawData = File.ReadAllBytes(string.Format(@"{0}\{1}", path, fi.Name ));
rslt.Add(new rptobj() { Photo = rawData, FileName = fi.Name });
}
return rslt;
}
}
C# から Microsoft Report Viewer Component を使用していて、レポートに画像を動的に追加したいと考えています。
これは確かに可能です。シリアル化されたビットマップを表す byte[] プロパティを持つクラスを作成する必要があります。
class ReportImage {
public byte[] Image {get;set;}
// Other stuff here if you want...
}
このオブジェクトのプロパティを、ビットマップのピクセルあたり 24 ビットのシリアル化されたバージョンに設定します (つまり、ビットマップを MemoryStream に保存してから、MemoryStream.ToArray() を呼び出します)。1 ピクセルあたり 24 ビットを使用する必要があり、保存する形式は BMP でなければなりません。これは Report Viewer で必要なようです。
次に、オブジェクト データ ソースにバインドできます (オブジェクトへのバインドの詳細については、MSDN のドキュメントを参照してください。こちらの例も参照してください)。画像アイテムを使用して、レポートに画像を表示します。
レポート内の画像は固定サイズでなければならないという制限があります。画像が収まるように、事前に画像を再サンプリングするか、Jon が示唆するように、レポート用の RDLC ファイルを動的に作成する必要があります。
短い答えは、少なくとも組み込みのレポート ビューアー機能では、これを行うことができないということです。
ただし、確実にこれを行う場合は、RDLC ファイルを動的に作成することを試みることができます。RDLC ファイルを動的に作成すると、レポートに画像を動的に追加できます。
RDLC ファイルを動的に作成する方法に関するサンプル コードは、こちらにあります。