将图像动态加载到ReportView

我的名字是Ed,我需要从ReportView dinamic加载图片。我能做到这一点吗? 我工作的Windows窗体,c#3.0和linq到sql,我需要加载图像到我的报告dinamic。

谢谢。

我假设您正在使用C#中的Microsoft Report Viewer Component,并且您想要动态地将图像添加到报表中。

这当然是可能的,您需要创建一个带有byte []属性的类,该属性表示序列化的位图。

class ReportImage { public byte[] Image {get;set;} // Other stuff here if you want... } 

将此对象的属性设置为Bitmap的每像素24位序列化版本(即将位图保存到MemoryStream,然后调用MemoryStream.ToArray())。 您必须使用每像素24位,并且保存到的格式必须是BMP,这在报告查看器中似乎是必需的。

然后,您可以绑定到对象数据源(有关绑定到对象的详细信息,请参阅MSDN文档 ,另请参阅此处的示例)。 使用“图像”项在报告中显示图像。

限制是报告中的图像必须是固定大小。 您必须事先对图像进行重新取样以使其适合,或者如Jon建议的那样,为报告动态创建RDLC文件。

这个答案非常有用(它让我过去在我的报告上有一些“破碎图像”框),但有点误导。

严格来说,并非要求“图像”(实际上是字节数组)是BMP格式。 在测试项目中,我能够从磁盘读取jpeg文件(即File.ReadAllBytes(filename);)并将生成的字节数组添加到“rptrow”列表中的byte []属性中(其中rptrow是表示的对象)报告表中一行的所有数据)。 报告上的图像将MIMEType设置为“image / jpeg”,并将Source属性设置为“Database”。 我还注意到,只要指定了某些东西,我使用的MIMEType并不重要(即不是空白)。

我赶时间,所以我甚至没有考虑检查它必须是24bpp图像的声明。

简化的rptobj:

 public class rptobj { public string FileName { get; set; } public byte[] Photo { get; set; } private List photos; public List GetList() { if (photos == null) { photos = LoadPhotos(); } return photos; } private List LoadPhotos() { var rslt = new List(); 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; } } 

简短的回答是你不能这样做,至少不能使用内置的报表查看器function。

但是,如果您确定要执行此操作,则可以尝试动态创建RDLC文件。 如果动态创建RDLC文件,则可以动态地将图像添加到报告中。

您可以在此处找到有关如何动态创建RDLC文件的示例代码。