我的名字是Ed,我需要从ReportView dinamic加载图片。我能做到这一点吗? 我工作的Windows窗体,c#3.0和linq到sql,我需要加载图像到我的报告dinamic。
感谢。
答案 0 :(得分:2)
我假设您正在使用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 documentation,另请参阅示例here)。使用“图像”项在报告中显示图像。
限制是报告中的图像必须是固定大小。您必须事先对图像进行重新取样以使其适合,或者如Jon建议的那样,为报告动态创建RDLC文件。
答案 1 :(得分:2)
This answer非常有帮助(它让我过去在我的报告中有一些“破碎图像”框),但有点误导。
严格来说,并非要求“图像”(实际上是字节数组)是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<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;
}
}
答案 2 :(得分:-1)
简短的回答是你不能这样做,至少不能使用内置的报告查看器功能。
但是,如果您确定要执行此操作,则可以尝试动态创建RDLC文件。如果动态创建RDLC文件,则可以动态地将图像添加到报告中。
您可以找到有关如何动态创建RDLC文件的示例代码here。