C# Crystal Reports without database

Typically, Crystal Reports is employed as a means to retrieve data from databases and present it in the form of comprehensive reports. However, in certain instances, there may be a requirement to generate Crystal Reports directly from C# without relying on a database. In such cases, we can use the capabilities of a Strongly Typed Dataset and a Data Table in C#.

With the Strongly-Typed Dataset, we can specify how the data will be structured and defined and used in the Crystal Report. This set of data is a strong corpus, which includes all the necessary items required to create a report. Instead, a Data Table (a vital part of the Strongly Typed Dataset) takes an article-of-the table data.

To create a Crystal Report without a database, we can populate the Data Table with the desired data, which can be sourced from various origins such as API responses, in-memory collections, or manually inputted data. With the Data Table containing the requisite information, we can seamlessly generate a Crystal Report by using the Crystal Reports tools available in C#.

If you are new to Crystal Reports and do not know how to create Crystal Reports from C# , please take a look at the section step by step tutorial for creating a Crystal Reports from C#.

Generating a Strongly Typed DataSet

Create a new C# Project and create a Dataset from Project - Add New Item Dialogue Box.

csharp-crystal-report-add-new

Select Dataset from list

csharp-crystal-report-dataset

Accept the default name DataSet1.xsd .

Create a data table for DataSet1.xsd in C#.

Select DataSet1.xsd from Solution Explorer and right click . Select datatable from the menu. Then you will get a datatable in the Datast . Right click the datatable and select Add-Column.

csharp-crystal-report-add-column

Here we are making a two column Crystal Reports , so we need two column in the data table . Add and ID column and Item column in the Data Table.

csharp-crystal-report-id-item

Now the dataset part is over . Next step is to create a Crystal Reports from the Dataset we created. Select a new Crystal Reports from Add New Item menu and accept the default settings. The next screen is to select appropriate data source . There you can find the Datatable1 from Project data - ADO.NET Datasets , and select Datatable1 to the right side.

csharp-crystal-report-datatable-select

Click Next button and select ID and Item from the datatable1 to right side and click finish.

csharp-crystal-report-datatable-items

Now the C# Crystal Reports designer part is over . Next part is to create data for the Crystal Reports . For that we have to create a Data Table through programmatically and add data to dataset1.

Select the default form (Form1.cs) you created in C# and drag a button and a CrystalReportViewer control to your form .

Copy and paste the following source code and run your C# project.

Full Source C#
using System; using System.Windows.Forms; using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Shared; using System.Data; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { DataSet1 ds = new DataSet1(); DataTable t = ds.Tables.Add("Items"); t.Columns.Add("id", Type.GetType("System.Int32")); t.Columns.Add("Item", Type.GetType("System.String")); DataRow r ; int i = 0; for (i = 0; i <= 9; i++) { r = t.NewRow(); r["id"] = i; r["Item"] = "Item" + i; t.Rows.Add(r); } CrystalReport1 objRpt = new CrystalReport1(); objRpt.SetDataSource(ds.Tables[1]); crystalReportViewer1.ReportSource = objRpt; crystalReportViewer1.Refresh(); } } }

Conclusion

This approach provides us with the flexibility to dynamically construct and design reports using the data available within the Strongly Typed Dataset and Data Table, even in the absence of a traditional database connection. It offers a practical solution for scenarios where direct data retrieval from a database is not necessary or feasible, granting us the ability to generate Crystal Reports solely within C# programming.