Oltețeanu Bogdan-Andrei

Unele lucruri nu se explică.

Imagini dinamice si Crystal Reports

leave a comment

Pentru ca se cere si se cauta, am sa-ti prezint o metoda pentru a integra imagini dintr-o cale(path) intr-un raport, la runtime. Metoda este pentru cei care folosesc CR < 11(pentru fericitii utilizatori de >11 exista ole object de tip bitmap cu optiunea Graphic Location).

Bun, sa purcedem!

In prima faza trebuie sa adaugi un DataSet nou in proiectul tau

Adauga un DataSet nou

si sa continui prin a-l edita pentru a adauga o tabela noua in dataset, dupa care adaugi o coloana noua  “picture” in tabela:

Adaugam un DataTable

1

3

2

column name

3

Acum nu iti mai ramane decat sa setezi tipul coloanei picture in byte[] si ai  terminat cu dataset-ul!

Setam tipul in byte[]

Setezi tipul

O sa plec de la premiza ca deja ai un crystalReportViewer si un raport facut asa ca sarim la urmatorul pas important. Editezi raportul  si din fereastra Field Explorer faci click dreapta pe Database Fields -> Database Expert… si navighezi pana la Project Data -> ADO.NET DataSets -> [numele proiectului+numele dataset-ului]->tabela noastra, si o adaugi cu dublu click in raportul tau ca in figura de mai jos:

Adaugam tabela noastra in raport

Adaugarea tabelei din dataset in raport

Apesi ok si adaugi campul “picture” in raport. Ar trebui sa arate cam asa:

Raport final

Raport final

Tot ce mai trebuie sa mai faci acum e sa creezi o metoda care sa citeasca o imagine de pe disc (sau sa o folosesti pe a mea), sa o transforme in byte[] si apoi sa o puna in tabela noastra.


private void PutMyPicture()
{

String picturePath = @"c:\picture.jpg";
byte[] myBytePicture = null;

if (File.Exists(picturePath))
{
//citim imaginea ca un array de bytes
FileStream fs = new FileStream(picturePath, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
int pictureLenght = (int)br.BaseStream.Length;
myBytePicture = new byte[pictureLenght];
myBytePicture = br.ReadBytes(pictureLenght);
br.Close();
fs.Close();

//adaugam un rand nou in tabela noastra
DataSet ds=new DataSet1();
DataRow dr = ds.Tables["DataTable1"].NewRow();
dr["picture"] = myBytePicture;
ds.Tables["DataTable1"].Rows.Add(dr);
//asociem raportului nostru dataset-ul
CrystalReport11.SetDataSource(ds);
}
else
{
MessageBox.Show("O nu, poza nu exista!\nIncearca sa pui o poza cu numele picture.jpg in c"winking;
}
}

Am atasat si un demo ca proiect daca cumva te ajuta mai mult:

  Imagini Dinamice cu CR (89.9 KiB, 1,729 hits)

Written by andy

December 11th, 2009 at 1:27 pm

Leave a Reply