2009-04-24 56 views
0

我的名字是Ed,我需要從ReportView加載圖像dinamic.How我能做到這一點嗎? 我工作Windows窗體,C#3.0和LINQ到SQL,我需要加載圖像到我的報告動態。將圖像動態加載到ReportView

謝謝。

+1

你的問題是可怕的格式化。爲什麼你把它全部放在「代碼」標籤中? – 2010-02-02 04:43:15

回答

-1

簡短的回答是,你不能這樣做,至少不是內置的報表查看器功能。

但是,如果您確定要執行此操作,則可以嘗試動態創建RDLC文件。如果您動態創建RDLC文件,則可以動態地將圖像添加到報告中。

你可以找到一些示例代碼,瞭解如何動態創建RDLC文件here

+2

這個答案根本不正確。正如Peter Tate的回答所顯示的那樣,這可以做到。 – 2010-02-02 04:43:47

2

我假設您使用的是C#中的Microsoft Report Viewer組件,並且您想要動態地將圖像添加到報表中。

這當然是可能的,你需要創建一個帶有byte []屬性的類來表示序列化的位圖。

class ReportImage { 
    public byte[] Image {get;set;} 

    // Other stuff here if you want... 
} 

設置此對象的位圖的每像素24位序列化版本的屬性(即保存位圖以一個MemoryStream,然後調用MemoryStream.ToArray())。您必須使用每像素24位,並且您保存到的格式必須爲爲BMP,這似乎是報表查看器中所必需的。

然後,您可以綁定到對象數據源(有關綁定到對象的詳細信息,請參閱MSDN documentation,另請參閱示例here)。使用圖像項目在報告中顯示圖像。

限制是報告中的圖像必須是固定的大小。您必須事先對圖像進行重新採樣以適應它們,或者,正如Jon所建議的那樣,爲報告動態創建RDLC文件。

2

This answer是非常有幫助的(它讓我過去了,在我的報告中有一些「破碎的圖像」框),但有點誤導。

嚴格來說,不是要求「圖像」(實際上是一個字節數組)是BMP格式。在一個測試項目中,我能夠從磁盤讀取jpeg文件(即File.ReadAllBytes(filename);)並將結果字節數組添加到「rptrow」列表中的byte []屬性(其中rptrow是一個表示報告表中一行的所有數據)。報告中的圖像的MIMEType設置爲「image/jpeg」,Source屬性爲「數據庫」。我還注意到,只要指定了某些東西(不是空白的),我所用的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; 
    } 
}