How to use data source in FastReport Open Source reports
When you
create a web report for FastReport Open Source, you use a database to construct
a template.
You create an internal connection to the data source and add table
fields to the report page. But, when the report is used in real conditions, the
database specified in the internal connection may not be available. And
then you will see such kind of
error.
Of course,
the connection string must be in the same database that was used when creating
the report template. After all, the template contains specific names of tables
and fields.
You can reset
the connection string in the report in two ways:
• Directly
from user application code;
• Through
the report parameter.
Let's look
at both ways in more details.
Let's
create a report template with an internal connection to the data source using
the free report designer FastReport Designer Community. No matter what the
report is about, we are interested in the data connection.
Add this report to your ASP.NET Core web
application with FastReport Open Source. In this example, the XML database is
used as the data source. For the experiment, change the name of this xml file.
After that, the report will stop working in preview mode, and when you try to
build it in a web application, we will see an error, shown at the beginning of
the article.
Now let's change the code for web report
generation:
public WebReport GetReport()
{
string webRootPath =
_hostingEnvironment.WebRootPath; // Get the path to the wwwroot folder
WebReport webReport = new
WebReport(); // Create a
Web Report Object
webReport.Report.Load(webRootPath + "/reports/Master-Detail.frx"); // Load the report into the WebReport
object
webReport.Report.Dictionary.Connections[0].ConnectionString = "XsdFile=;XmlFile=C:\\Users\\Dimon\\source\\repos\\FROS_MVC_PDF\\FROS_MVC_PDF\\wwwroot\\reports\\nwind1.xml";
return webReport;
}
As you can
see, we just changed the connection string in the data source. After
this report is generated without
any errors:
Now
consider the second method of substitution of the connection string. This time
the substitution will occur within the report. Actually, it is not even a
substitution, but the installation of a connection string, because we will use
the parameter instead of the real value.
In the
report we created earlier, add a parameter called ConnectionString:
Then,
select ‘Connection’ with the mouse. In the Property Inspector, find
ConnectionStringExpression.
Let's choose the created ConnectionString
variable for it:
Now back to our application. Let's change the
web report generation method:
public WebReport GetReport()
{
string webRootPath =
_hostingEnvironment.WebRootPath; // Get the path to the wwwroot folder
WebReport webReport = new
WebReport(); // Create a
Web Report Object
webReport.Report.Load(webRootPath + "/reports/Master-Detail.frx"); // Load the report into the WebReport
object
var dataSet = new DataSet(); // Create a data source
dataSet.ReadXml(webRootPath + "/reports/nwind1.xml");
webReport.Report.SetParameterValue("ConnectionString", "XsdFile=;XmlFile=C:\\Users\\Dimon\\source\\repos\\FROS_MVC_PDF\\FROS_MVC_PDF\\wwwroot\\reports\\nwind1.xml");
return webReport;
}
As a
result, we get a workable report.
What is the
difference between these approaches? In the first case, we have a report with
the specified connection string, and in the second, with an undefined one. In
our case, there is no difference. We can easily set the connection string or
report parameter directly from the application code.
I created a report using SQL server, but when executing this line:
ReplyDeletewebReport.Report.Load(webRootPath + "/reports/indicator11.frx");
I have this error when loading the report:
FastReport.Utils.ClassException: 'Can't find object MsSqlDataConnection'
NOTE: I created the report with fast report community designer.
In Package Manager Console:
DeleteInstall-Package FastReport.OpenSource.Data.MsSql
In Startup.cs:
FastReport.Utils.RegisteredObjects.AddConnection(typeof(FastReport.Data.MsSqlDataConnection));
not mentioned in the article , thank you very much.
DeleteI have created a fast report with parameter and based on that parameter i want to get the report data.
ReplyDeletei build report with query like " select * from Bill inner join BillDetail on Bill.id = BillDetail.BillId
where Bill.id = " + @ID. Here @ID is Parameter. when i call this report from dot net core i set param value from code but the data is not fetch based on the parameter which i passed. Some one help me please.