2009-04-24 10 views
0

Mon nom est Ed et j'ai besoin de charger l'image de ReportView dinamic.Comment je peux le faire? Je travaille les formes de fenêtres, C# 3.0 et linq à sql, j'ai besoin de charger l'image à mes rapports dinamic.Charger l'image à ReportView dynamiquement

Merci.

+1

Votre question est horriblement formatée. Pourquoi avez-vous tout mis dans les balises "code"? –

Répondre

-1

La réponse courte est que vous ne pouvez pas faire cela, du moins pas avec les fonctions de visionneuse de rapports intégrées. Toutefois, si vous êtes sûr de vouloir procéder ainsi, vous pouvez essayer de créer dynamiquement des fichiers RDLC. Si vous créez dynamiquement vos fichiers RDLC, vous pouvez ajouter dynamiquement des images aux rapports.

Vous pouvez trouver un exemple de code sur la façon de créer des fichiers RDLC dynamiquement here.

+2

Cette réponse n'est tout simplement pas correcte. Cela peut être fait, comme le montre la réponse de Peter Tate. –

+0

Merci d'avoir signalé cela à Matthew. J'ai également réparé le message original pour vous. – jgallant

2

Je suppose que vous utilisez le composant Microsoft Report Viewer de C# et que vous souhaitez ajouter dynamiquement une image au rapport.

Cela est certainement possible, vous devez créer une classe avec une propriété byte [] qui représente le bitmap sérialisé.

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

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

Définissez la propriété de cet objet l'une version sérialisée 24 bits par pixel de votre Bitmap (à savoir enregistrer votre bitmap à un MemoryStream, puis appelez MemoryStream.ToArray()). Vous devez utiliser 24 bits par pixel, et le format que vous enregistrez à doit être être BMP, cela semble être requis dans le Report Viewer.

Vous pouvez ensuite vous lier à la source de données d'objet (voir MSDN documentation pour plus de détails sur la liaison aux objets, voir également l'exemple here). Utilisez l'élément Image pour afficher votre image dans le rapport.

La limite est que les images de votre rapport doivent être de taille fixe. Vous devrez rééchantillonner les images à l'avance pour les intégrer ou, comme le suggère Jon, créer dynamiquement le fichier RDLC pour le rapport.

2

This answer est très utile (il m'a passé passé de petites boîtes "image brisée" sur mon rapport), mais un peu trompeur.

Il n'est pas strictement nécessaire que l'image (qui est en fait un tableau d'octets) soit un format BMP. Dans un projet de test, j'étais capable de lire des fichiers jpeg à partir du disque (ie File.ReadAllBytes (filename);) et d'ajouter les tableaux d'octets résultants à une propriété byte [] dans une liste de "rptrow" (où rptrow est un objet qui représente toutes les données pour une ligne dans une table de rapport). Les images du rapport avaient le type MIMET défini sur "image/jpeg" et une propriété Source de "Database". J'ai également remarqué que peu importe quel MIMEType j'utilisais tant que quelque chose était spécifié (c'est-à-dire pas vide). J'étais pressé, donc je n'ai même pas envisagé de vérifier l'affirmation qu'il devait s'agir d'une image de 24bpp.

rptobj simplifié:

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; 
    } 
} 
Questions connexes