Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将图像动态加载到ReportView_C#_Linq_Reportviewer - Fatal编程技术网

C# 将图像动态加载到ReportView

C# 将图像动态加载到ReportView,c#,linq,reportviewer,C#,Linq,Reportviewer,我的名字是Ed,我需要从ReportView dinamic加载图像。我如何才能做到这一点? 我使用windows窗体、c#3.0和linq to sql,我需要将图像加载到我的报告dinamic中 谢谢。简而言之,您无法做到这一点,至少使用内置的报表查看器功能是不行的 但是,如果确定要这样做,可以尝试动态创建RDLC文件。如果动态创建RDLC文件,则可以将图像动态添加到报告中 您可以找到一些关于如何动态创建RDLC文件的示例代码。简短的回答是,您无法做到这一点,至少使用内置的报表查看器功能是不

我的名字是Ed,我需要从ReportView dinamic加载图像。我如何才能做到这一点? 我使用windows窗体、c#3.0和linq to sql,我需要将图像加载到我的报告dinamic中


谢谢。

简而言之,您无法做到这一点,至少使用内置的报表查看器功能是不行的

但是,如果确定要这样做,可以尝试动态创建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));