2009-05-05 6 views
2

Est-ce que quelqu'un sait comment puis-je obtenir une image enregistrée dans une base de données et l'afficher dans ReportViewer 2008?Comment puis-je charger une image enregistrée dans la base de données dans Visual Studio ReportViewer 2008?

Merci!

+0

Bonne question, je serais intéressé de le savoir moi-même. Je n'utilise pas encore SQL 2008, mais j'espère que toutes les réponses postées s'appliqueront également à SQL 2000 & SQL 2005 – Eppz

+0

Quel type de source de données utilisez-vous? Rendu local ou distant? – cdonner

Répondre

1

Je le fais actuellement, mais ce n'était pas facile à réaliser.

J'ai créé une classe qui génère des fichiers RDLC dans un MemoryStream. Le flux de mémoire RDLC est envoyé au contrôle reportViewer, qui à son tour affiche le rapport.

Lors de la génération du fichier RDLC, vous pouvez créer une image incorporée. Pour ce faire, je récupère l'image dans un tableau Byte, puis je convertis le tableau Byte en encodage Base64. Les fichiers RDLC nécessitent l'encodage Base64 pour que les images s'affichent correctement.

Encore une fois, ce n'était pas facile à réaliser, donc vous aurez vraiment besoin de vouloir le faire pour le retirer. Si vous voulez continuer avec cette méthode, je peux vous donner plus de détails.

EDIT (Plus de détails)

Vous pouvez obtenir un exemple de code sur la façon de créer dynamiquement des fichiers rdlc à GotReportViewer. Lien direct au code pour VB.NET et C#.

Si vous parvenez à comprendre comment ce code fonctionne, vous pourrez générer vos fichiers RDLC et n'auriez pas besoin de créer manuellement les fichiers vous-même. Encore une fois, je dois souligner le fait que vous allez bricoler beaucoup pour arriver là où vous voulez être avec ça.

Maintenant, afin de générer des images, récupérez-le dans la base de données. Lorsque vous le récupérez de la base de données (j'utilise des objets BLOB), vous obtenez un tableau d'octets. Le tableau Byte contient les données de l'image, mais je ne peux pas l'utiliser dans son état actuel. Pour convertir, vous pouvez faire quelque chose comme ceci:

Dim output As String = "" 
output = Convert.ToBase64String(imgByteArray) 

La chaîne de sortie résultante sera compatible avec ReportViewer. Vous pouvez maintenant ajouter dynamiquement cette chaîne dans le fichier RDLC du ReportViewer (fichier XML). En utilisant les exemples de code de GotReportViewer, vous pouvez effectuer les opérations suivantes:

'Inserts embedded images into the report 
    Overridable Function CreateEmbeddedImages() As Rdl.EmbeddedImagesType 
    Dim bgCell As New Rdl.EmbeddedImageType 
    Dim images As New Rdl.EmbeddedImagesType 

    bgCell.Name = "bgTableHeader" 
    bgCell.Items = New Object() {"image/jpeg", output} 
    bgCell.ItemsElementName = New Rdl.ItemsChoiceType35() {Rdl.ItemsChoiceType35.MIMEType, Rdl.ItemsChoiceType35.ImageData} 

    images.EmbeddedImage = New Rdl.EmbeddedImageType() {bgCell} 
    Return images 

    End Function 

Le type RDL est le Report Definition Language fichier de classe. Fondamentalement, c'est un schéma RDLC XSD inversé. Il contient des classes qui seront utilisées pour générer un fichier XML valide pour vos rapports. Il est inclus dans le lien GotReportViewer en haut, mais vous pouvez en générer un vous-même en utilisant l'outil XSD.EXE fourni avec Visual Studio.

+0

S'il vous plaît, Jon, pouvez-vous me donner plus de détails? – AndreMiranda

Questions connexes