Dynamic Content into Crystal Report

Hello:

Is there a way to put a "placeholder" (if you will) in CR, that would hold an image created during runtime by VB.Net.

In other words, a big empty spot in the CR designer, that would be filled by a picture that was created by VB.Net and inserted maybe via bitstream.

Please give me some ideas!!!

Thanks in advance.
LVL 4
jrandallsextonAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

mlmccCommented:
Here is how to do that from VB6.  It must be saved as a bmp

http://support.businessobjects.com/communityCS/FilesAndUpdates/cr9_vb_rdc_loadpic.exe.asp

I'll look for a .net example

mlmcc
0
jrandallsextonAuthor Commented:
I don't have VB6 installed and the conversion wizard bombed.

I really need a .Net example.

Thanks!!!
0
jrandallsextonAuthor Commented:
What about storing an image in SQL server, and simply pulling from image datatype into report?  I tried it, but couldn't make it work.  Anyone ever do that before?
0
Cloud Class® Course: Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

ebolekCommented:
this is what you have to do .I have already anwered this question so other than explain it here go to the link. It will help you

http://www.experts-exchange.com/Databases/Crystal_Reports/Q_21130269.html

Regards
Emre
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
jrandallsextonAuthor Commented:
ebolek:

I appreciate the link you posted.  However, simply posting code doesn't always help.

What did you do? Did you create a strongly typed dataset and design the Crystal Report from the XML file you produced from the dataset?

Looks like your dataset is:
PicNumber Integer
ImagePath String
Image Byte[]

Is that correct?

How did you get Crystal to display an image instead of an empty blob field?  I ask this because I tried something similar by storing images in SQL server using an Image datatype.  I pointed the report to the table and when it came back, there were empty squares where the pictures should have been.

0
jrandallsextonAuthor Commented:
ebolek:

I got it working.  

For everyone else: Execute your code so that the XML file creates, then base your report off of the XML file. When you go to run the report 'for real', simply use: myReport.SetDataSource(myDataSet)

The VB.Net code is posted below:

***************************************************************
                    Dim myDataset As New DataSet
                    Dim myDataTable As DataTable
                    Dim myDataRow As DataRow
                    myDataTable = New DataTable
                    Dim myDataColumn As New DataColumn
                    myDataColumn = New DataColumn("PicNumber", Type.GetType("System.Int32"))
                    myDataTable.Columns.Add(myDataColumn)
                    myDataColumn = New DataColumn("ImagePath", Type.GetType("System.String"))
                    myDataTable.Columns.Add(myDataColumn)
                    myDataRow = myDataTable.NewRow
                    myDataRow("PicNumber") = 1
                    myDataRow("ImagePath") = "C:\test.bmp"
                    myDataTable.Rows.Add(myDataRow)
                    myDataset.Tables.Add(myDataTable)
                    'Add the image column to the table
                    AddImageColumn(myDataTable, "Image")
                    myDataset.WriteXmlSchema("C:\Image.xsd")
                    'Load the images into the dataset
                    LoadAllImages(myDataTable, "ImagePath", "Image")
                    crpCR1 = New DundasTest
                    crpCR1.setdatasource(myDataset)
***************************************************************

    Public Sub AddImageColumn(ByVal myDataTable As DataTable, ByVal fieldName As String)
        Try
            Dim myDataColumn As New DataColumn(fieldName, Type.GetType("System.Byte[]"))
            myDataTable.Columns.Add(myDataColumn)
        Catch ex As Exception
            MsgBox(Err.Description & " - " & ex.InnerException.ToString)
        End Try
    End Sub

    Public Sub LoadAllImages(ByVal myDataTable As DataTable, ByVal filePathField As String, ByVal ImageField As String)
        Try
            Dim myDatarow As DataRow
            For Each myDatarow In myDataTable.Rows
                LoadImage(myDatarow, ImageField, myDatarow(filePathField).ToString)
            Next
        Catch ex As Exception
            MsgBox(Err.Description & " - " & ex.InnerException.ToString)
        End Try
    End Sub

    Public Sub LoadImage(ByVal myDataRow As DataRow, ByVal ImageField As String, ByVal FilePath As String)
        Try
            FilePath = "C:\test.bmp"
            Dim fs As New IO.FileStream(FilePath, IO.FileMode.Open)
            Dim image() As Byte
            Dim br As New IO.BinaryReader(fs)
            image = br.ReadBytes(CInt(fs.Length))
            myDataRow(ImageField) = image
            fs.Close()
            br.Close()
        Catch ex As Exception
            MsgBox(ex.InnerException.ToString)
        End Try
    End Sub
0
jrandallsextonAuthor Commented:
By the way, I graded the answer as a "B" because I felt that ebolek could have done a better job explaining what he was doing in his other post.
0
ebolekCommented:
whatever you feel but this should have saved you from long hours of trying to find how to do this.
0
jrandallsextonAuthor Commented:
I'm not denying that you saved me MUCH time.  Just after I read through your other post, I felt that you didn't do a very good job explaining.  You pretty much put the code out there and said 'here it is'.  Anyway.  Good solution and I appreciate your help.  You still got 1500 pts.

Thanks again.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Crystal Reports

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.