Foto in un report di stampa, come?

giovedì 24 luglio 2008 - 07.55

basicdany Profilo | Expert

Ciao, a tutti, ho questo problema, ho realizzato delle stampe con cristal report in vb.net 2003,
ho utilizzato lo strumento cristal report integrato in visual studio, ho BISOGNO DI IN INSERIRE 2 FOTO
NEI REPORT, IL PERCORSO E INDICATO DA UN CAMPO DOVE E COLLEGATO IL REPORT, COME SI FA QUESTO??
cHE CONTROLLO SI UTILIZZA IN CRISTAL REPORT per inserire le foto?

Grazie a tutti, aspetto risposta.

freeteo Profilo | Guru

ciao,
se le foto le devi importare dentro al report e poi salvare il report con quelle 2 immagini fisse, ti basta usare un campo immagine (TastoDX->Insert->Picture) e dargli il file immagine.

Se invece il path dell'immagine arriva solo a runtime, purtroppo non puoi modifcare il report a runtime, quindi devi pensare ad una tecnica tipo questa:
http://www.dotnethell.it/tips/Crystal-Reports-BLOB.aspx

ovvero campo byte[] nel db (se non c'è ti basta aggiungerlo ad un db temporaneo e costruire il report su quello), metti giu il campo nel report e poi da codice gli passi una DataTable con quel campo riempito con i bytes letti tramite codice .net.

ciao.

ps: per i problemi di report, anche se sono di WindowsForm o Asp.net, ce'è una stanza apposita del forum, usa quella così teniamo in ordine i thread, grazie.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

basicdany Profilo | Expert

ciao, grazie per la risposta, il mio problema è proprio quello di passare
la path della foto in runtime ogni volta che richiamo la stampa di certi dati, ti spiego:
I dati del report sono collegato ad un dataset tipizzato,
io quindi rimpio ogni volta il dataset tipizzato è lancio la stampa,
ora sono al punto che ho 2 campi dove il contenuto è il percorso delle foto.

Quindi in sostanza come passo all'oggetto OLE se ho ben capito che devo caricare nel report il percorso della foto, il codice che mi hai detto di controllare e questo:

Listato n°1
private byte[] getFile(string pFilePath)
{
FileStream mioStream = new FileStream(pFilePath,FileMode.Open,FileAccess.Read);
byte[] mioBuffer = new byte[mioStream.Length];
mioStream.Read(mioBuffer, 0, mioBuffer.Length);
return mioBuffer;
}


e lo si carica per ogni record che risulta della mia tabella:

Listato n°3
//---- leggo i file immagine e poi li parcheggio nel DB nella colonna OLE

foreach(DataRow miaDr in miaTab.Rows)
miaDr["immagine"] = getFile((string)miaDr["pathimg"]);

NON CAPISCO DOVE DEVO INSERIRE QUESTO CODICE, E COME SCRIVERLO IN VB.NET.

GRAZIE ASPETTO GENTILE RISPOSTA.

freeteo Profilo | Guru

ciao,
il codice è quello (per convertirlo puoi usare anche un tool online tipo: http://www.carlosag.net/Tools/CodeTranslator/) perchè devi passare al report un datatable, il datatable come ti dicevo ha, un campo in più che nell'esempio è "immagine" che contiene i byte (File.ReadAllBytes(...) appunto) del file immagine.

Creando il report con un database, temporaneo se vuoi, con un campo "Ole" o cmq "Byte[]" che Crystal interpreta come un campo immagine, ti basta poi riempire da codice (come vedi nell'esempio allegato http://www.dotnethell.it/files/Crystal_Blob.zip) quella datatable, che avrà tutti i dati del db, tranne per quel campo "immagine" che viene riempito girando sulle righe e leggendo i byte[] dell'immagine.

Solo dopo questo caricamento lo puoi passare al report, altrimenti non ha senso.
Cmq trovi tutto nel progetto allegato.

ps: la traduzione c# <-> vb.net è qualcosa a cui ti devi abituare dato che troverai maggiori esempi in c# e cmq entrambi i linguaggi usando il framework avranno tantissime cose in comune, si tratta veramente di poca fatica...e poi ci sono anche tool come quello che ti aiutano ancora di piu

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

basicdany Profilo | Expert

ciao, gentilissimo, mi vedo l'esempio e ti faccio sapere, grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5