C# 将图像动态加载到ReportView
我的名字是Ed,我需要从ReportView dinamic加载图像。我如何才能做到这一点? 我使用windows窗体、c#3.0和linq to sql,我需要将图像加载到我的报告dinamic中C# 将图像动态加载到ReportView,c#,linq,reportviewer,C#,Linq,Reportviewer,我的名字是Ed,我需要从ReportView dinamic加载图像。我如何才能做到这一点? 我使用windows窗体、c#3.0和linq to sql,我需要将图像加载到我的报告dinamic中 谢谢。简而言之,您无法做到这一点,至少使用内置的报表查看器功能是不行的 但是,如果确定要这样做,可以尝试动态创建RDLC文件。如果动态创建RDLC文件,则可以将图像动态添加到报告中 您可以找到一些关于如何动态创建RDLC文件的示例代码。简短的回答是,您无法做到这一点,至少使用内置的报表查看器功能是不
谢谢。简而言之,您无法做到这一点,至少使用内置的报表查看器功能是不行的 但是,如果确定要这样做,可以尝试动态创建RDLC文件。如果动态创建RDLC文件,则可以将图像动态添加到报告中
您可以找到一些关于如何动态创建RDLC文件的示例代码。简短的回答是,您无法做到这一点,至少使用内置的报表查看器功能是不行的 但是,如果确定要这样做,可以尝试动态创建RDLC文件。如果动态创建RDLC文件,则可以将图像动态添加到报告中
您可以找到一些关于如何动态创建RDLC文件的示例代码。我假设您使用的是C#中的Microsoft Report Viewer组件,并且您希望动态向报表添加图像 这当然是可能的,您需要创建一个具有byte[]属性的类,该属性表示序列化位图
class ReportImage {
public byte[] Image {get;set;}
// Other stuff here if you want...
}
将此对象的属性设置为位图的每像素24位序列化版本(即,将位图保存到MemoryStream,然后调用MemoryStream.ToArray()。您必须使用每像素24位,并且保存的格式必须是BMP,这在报表查看器中似乎是必需的
然后可以绑定到对象数据源(有关绑定到对象的详细信息,请参见示例)。使用图像项在报告中显示图像
限制是报告中的图像必须为固定大小。您必须事先对图像进行重采样以使其适合,或者,正如Jon所建议的,为报表动态创建RDLC文件。我假设您使用的是C#中的Microsoft报表查看器组件,并且您希望动态向报表添加图像 这当然是可能的,您需要创建一个具有byte[]属性的类,该属性表示序列化位图
class ReportImage {
public byte[] Image {get;set;}
// Other stuff here if you want...
}
将此对象的属性设置为位图的每像素24位序列化版本(即,将位图保存到MemoryStream,然后调用MemoryStream.ToArray()。您必须使用每像素24位,并且保存的格式必须是BMP,这在报表查看器中似乎是必需的
然后可以绑定到对象数据源(有关绑定到对象的详细信息,请参见示例)。使用图像项在报告中显示图像
限制是报告中的图像必须为固定大小。您必须事先对图像进行重新采样,以使其适合,或者,正如Jon所建议的那样,为报告动态创建RDLC文件。非常有用(它让我在报告中不再有“损坏的图像”框),但有点误导
严格来说,“图像”(实际上是一个字节数组)不是BMP格式的要求。在一个测试项目中,我能够从磁盘读取jpeg文件(即File.ReadAllBytes(filename);),并将生成的字节数组添加到“rptrow”列表中的byte[]属性中(其中rptrow是表示报表表中一行的所有数据的对象)。报告中的图像的MIMEType设置为“image/jpeg”,源属性为“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;
}
}
公共类rptobj
{
公共字符串文件名{get;set;}
公共字节[]Photo{get;set;}
私人名单照片;
公共列表GetList()
{
如果(照片==null)
{
照片=加载照片();
}
归还照片;
}
私人列表加载照片()
{
var rslt=新列表();
字节[]原始数据;
var path=HttpContext.Current.Server.MapPath(@“~\images”);
DirectoryInfo di=新的DirectoryInfo(路径);
FileSystemInfo[]fis=di.getfilesysteminfo(“*.jpg”);
foreach(金融机构中的var fi){
rawData=File.ReadAllBytes(string.Format(@{0}\{1}),path,fi.Name));
添加(新的rptobj(){Photo=rawData,FileName=fi.Name});
}
返回rslt;
}
}
非常有帮助(它让我在报告中不再有“坏图像”框),但有点误导
严格来说,“图像”(实际上是一个字节数组)不是BMP格式的要求。在一个测试项目中,我能够从磁盘读取jpeg文件(即File.ReadAllBytes(filename);),并将生成的字节数组添加到“rptrow”列表中的byte[]属性中(其中rptrow是表示报表表中一行的所有数据的对象)。报告中的图像的MIMEType设置为“image/jpeg”,源属性为“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;
}
}
公共类rptobj
{
公共字符串文件名{get;set;}
公共字节[]Photo{get;set;}
私人名单照片;
公共列表GetList()
{
如果(照片==null)
{
照片=加载照片();
}
归还照片;
}
私人列表加载照片()
{
var rslt=新列表();
字节[]原始数据;
var path=HttpContext.Current.Server.MapPath(@“~\images”);
DirectoryInfo di=新的DirectoryInfo(路径);
FileSystemInfo[]fis=di.getfilesysteminfo(“*.jpg”);
foreach(金融机构中的var fi){
rawData=File.ReadAllBytes(string.Format(@{0}\{1}),path,fi.Name));