Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Generate a Crystal Reports report without a database

0.00/5 (No votes)
21 Nov 2006 1  
How to create a Crystal Reports report and fill it without a database.

Introduction

Sometimes we want to do tricks with the Crystal Reports engine, like profiting from the Exporting functions to create Word, Excel, or PDF files. What if we don't read the data from a database? This article shows the details on creating a Crystal Reports sub report, and how to fill it from code, without a database.

Using the code

Create the Project:

  1. File -> New -> New project

    Create a New Crystal Reports Visual Basic Windows Application.

Create the DataSet schema:

  1. Right click the Crystal Reports project -> Add -> New Folder

    Name it DataSets.

  2. Right click the DataSets folder -> Add -> New Item

    Create a new CRDataSet DataSet.

  3. Right click the CRDataSet Designer Page -> Add -> New Element

    Name it MainTable.

  4. Add new Field1, Field2, Field3 rows.

  5. Repeat steps 3 and 4, add a new DetailTable element.

You will have the following DataSet tables schema:

DataSet tables schema

Create the Crystal Reports report:

  1. Right click the Crystal Reports project -> Add -> New Folder

    Name it Reports.

  2. Right click the Reports folder -> Add -> New Item

    Open a new MainReport Crystal Reports report.

  3. Click the Register Later button to close the annoying register window, if it appears.

  4. Select Subreport and click OK. In the Contain Subeport Expert window Data tab, expand Project Data -> ADO.NET DataSet -> CrystalReport.CRDataSet.

  5. Select MainTable. Click the Insert Table button.

  6. Click Next.

  7. Click the Add All button. Click Next. Click Next. Click Next.

  8. Next to the Create a Subreport choice of the Subreport window tab, type DetailReport in the Report Name edit box.

  9. Click the Report Expert button. Insert DetailTable. Click Next to open the Subreport Generator.

    1. Add All fields. Click Next. Click Next. Click Next. Click Next.

    2. Type "No DB Subreport Crystal Report Sample" as the Subreport Title.

    3. Click Finish.

  10. Click Next. Type "No DB Crystal Report Sample." as the Main Report title. Click Finish.

Add the a CrystalReportViewer1 to the form.

  1. Open the Form1 form. Click View -> Toolbox in the menu.

  2. Drag (from the bottom of the Windows Forms tab in the Toolbox) a CrystalReportViewer into the form.

  3. Right click the CrystalReportViewer1 CrystalReportViewer in the form -> Properties.

  4. Set the Dock property to Fill.

Add the code to fill and show the Crystal Reports report.

Right click the Form -> View Code. Add the following Form1_Activated method:

Private Sub Form1_Activated(ByVal sender As Object, _
        ByVal e As System.EventArgs) _
        Handles MyBase.Activated
    Dim dsObj As CRDataSet = New CRDataSet
    FillDataSet(dsObj)

    Dim cr As MainReport = New MainReport

    ' Set the report DataSet   

    cr.SetDataSource(dsObj)

    CrystalReportViewer1.ReportSource = cr

End Sub

Add the following FillDataSet method:

Public Sub FillDataSet(ByRef dataSet As CRDataSet)

    ' Turn off constraint checking before the dataset is filled.

    ' This allows the adapters to fill the dataset without concern

    ' for dependencies between the tables.

    dataSet.EnforceConstraints = False
    Try
        ' Attempt to fill the dataset MainTable

        dataSet.MainTable.AddMainTableRow("Hello!", _
                         "This is", "my sample data")

        ' Attempt to fill the dataset DetailTable

        dataSet.DetailTable.AddDetailTableRow("This is", _
                           "the detail", "information")
        dataSet.DetailTable.AddDetailTableRow("added", _
                           "without the", "need of")
        dataSet.DetailTable.AddDetailTableRow("actually", _
                           "access a", "database.")
    Catch ex As Exception
        ' Add your error handling code here.

        Throw ex
    Finally
        ' Turn constraint checking back on.

        dataSet.EnforceConstraints = True
    End Try

End Sub

Build and run the application.

That's it!

History

  • 21 Nov 2006 - Posted.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here