Loading reports at run time requires a report definition file and works like a viewer. The main advantage of this type of application is that if you modify the report format, there's no need to update the application. Simply send the new report definition file to the users and you are done.
To create an application with reports loaded at run time, follow these steps:
To write code in Visual Basic
| Visual Basic |
Copy Code
|
|---|---|
Imports C1.C1Report Imports System.IO |
|
To write code in C#
| C# |
Copy Code
|
|---|---|
using C1.C1Report; using System.IO; |
|
This allows you to reference the C1Report and System.IO classes and objects without having to specify the full namespaces.
To write code in Visual Basic
| Visual Basic |
Copy Code
|
|---|---|
' get application path
Dim appPath As String
appPath = Path.GetDirectoryName(Application.ExecutablePath).ToLower()
Dim i As Integer = appPath.IndexOf("/bin")
If (i < 0) Then i = appPath.IndexOf("\bin")
If (i > 0) Then appPath = appPath.Remove(i, appPath.Length - i)
' get names of reports in the report definition file
m_ReportDefinitionFile = appPath & "\Data\Nwind.xml"
Dim reports As String() = c1r.GetReportInfo(m_ReportDefinitionFile)
' populate combo box
cmbReport.Items.Clear()
Dim report As String
For Each report In reports
cmbReport.Items.Add(report)
Next
|
|
To write code in C#
| C# |
Copy Code
|
|---|---|
// get application path
string appPath;
appPath = Path.GetDirectoryName(Application.ExecutablePath).ToLower();
int i = appPath.IndexOf("/bin");
if ((i < 0) ) { i = appPath.IndexOf("\bin"); }
if ((i > 0) ) { appPath = appPath.Remove(i, appPath.Length - i); }
// get names of reports in the report definition file
m_ReportDefinitionFile = appPath + "\Data\Nwind.xml";
string ( reports) = c1r.GetReportInfo(m_ReportDefinitionFile);
// populate combo box
cmbReport.Items.Clear();
string report;
foreach report In reports
cmbReport.Items.Add(report);
}
|
|
The code starts by getting the location of the file that contains the report definitions. This is done using static methods in the system-defined Path and Application classes. You may have to adjust the code to reflect the location and name of your report definition file.
Then it uses the GetReportInfo method to retrieve an array containing the names of all reports in the report definition file (created in step 1), and populates the combo box that will allow users to select the report.
To write code in Visual Basic
| Visual Basic |
Copy Code
|
|---|---|
Private Sub cmbReport_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cmbReport.SelectedIndexChanged
Try
Cursor = Cursors.WaitCursor
' load report
status.Text = "Loading " & cmbReport.Text
c1r.Load(m_ReportDefinitionFile, cmbReport.Text)
' render into print preview control
status.Text = "Rendering " & cmbReport.Text
ppv.Document = c1r
' give focus to print preview control
ppv.StartPage = 0
ppv.Focus()
Finally
Cursor = Cursors.Default
End Try
End Sub
|
|
To write code in C#
| C# |
Copy Code
|
|---|---|
private void cmbReport_SelectedIndexChanged(object sender, System.EventArgs e)
{
try {
Cursor = Cursors.WaitCursor;
// load report
status.Text = "Loading " + cmbReport.Text;
c1r.Load(m_ReportDefinitionFile, cmbReport.Text);
// render into print preview control
status.Text = "Rendering " + cmbReport.Text;
ppv.Document = c1r;
// give focus to print preview control
ppv.StartPage = 0;
ppv.Focus();
} finally {
Cursor = Cursors.Default;
}
}
|
|