Solved

Dynamic Content into Crystal Report

Posted on 2004-11-01
557 Views
Last Modified: 2008-02-01
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.
0
Question by:jrandallsexton
    9 Comments
     
    LVL 100

    Expert Comment

    by:mlmcc
    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
     
    LVL 4

    Author Comment

    by:jrandallsexton
    I don't have VB6 installed and the conversion wizard bombed.

    I really need a .Net example.

    Thanks!!!
    0
     
    LVL 4

    Author Comment

    by:jrandallsexton
    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
     
    LVL 10

    Accepted Solution

    by:
    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
     
    LVL 4

    Author Comment

    by:jrandallsexton
    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
     
    LVL 4

    Author Comment

    by:jrandallsexton
    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
     
    LVL 4

    Author Comment

    by:jrandallsexton
    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
     
    LVL 10

    Expert Comment

    by:ebolek
    whatever you feel but this should have saved you from long hours of trying to find how to do this.
    0
     
    LVL 4

    Author Comment

    by:jrandallsexton
    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

    Write Comment

    Please enter a first name

    Please enter a last name

    We will never share this with anyone. Privacy Policy Terms of Use

    Featured Post

    IT Security CISA, CISSP & CISM Certification

    Master the advanced techniques required to protect network resources from external threats with the IT Cyber Security bundle. Built around industry best-practice guidelines, the IT Cyber Security bundle consists of three in-depth courses.

    Suggested Solutions

    I hate sub reports and always consider them the last resort in any reporting solution.  The negative effect on performance and maintainability is just not worth the easy ride they give the report writer.  Nine times out of ten reporting requirements…
    Hello everyone, Hope you find this as helpful as we did. We have on the company I work for an application built in Delphi V with Crystal Reports 8. We all know that Crystal & Delphi can be temperamental sometimes and the worst thing is, nearly…
    This video is in connection to the article "The case of a missing mobile phone (https://www.experts-exchange.com/articles/28474/The-Case-of-a-Missing-Mobile-Phone.html)". It will help one to understand clearly the steps to track a lost android phone.
    Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…

    877 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    12 Experts available now in Live!

    Get 1:1 Help Now