Reporting With Reports Viewer in Visual Studio 2005: C# Corner Authors Team
Reporting With Reports Viewer in Visual Studio 2005: C# Corner Authors Team
Authors:
@2007 Mindcracker LLC. All rights reserved. United States and International copyright laws protect this property. Mindcracker LLC or the author of this material has no affiliation with Microsoft or any other companies that develops the software. Some keywords used in this material are registered trademarks of their respective owners. Reproduction or printing multiple copies of this material is prohibited. If you need multiple copies of this material, please contract [email protected].
Introduction
This document discusses the ReportViewer control and how to generate reports using the ReportViewer control. This document covers the following topics: Understanding the ReportViewer control and report processing modes Creating a simple report Generating reports from an object collection Generating reports from a DataSet Generating reports from an XML document
Figure 1. 6. It will add Report.rdlc file to your project and will open the report designer, which looks like Figure 2. As you can see in the left side, you will see your DataSet.
Figure 3. 8. Now if you right click and select Properties on a TextBox, you will see Figure 4, where you can apply settings like visibility, navigation, format, font, and sorting. For now, you can say OK on this dialog. I will discuss these properties in more details in my following articles.
Figure 4. 9. Now go to the Web page and click the smart tag on ReportViewer and select Report.rdlc from the list. See Figure 5.
Figure 5. 10. Thats it. Now if you run the application, you will see report. You can navigate through records, and export it to Excel or PDF using the Export option.
Listing 1. Now I build a Company class, which is a generic collection of Employee with three records in it. The Company class is listed in Listing 2.
class Company {
Listing 2. In Listing 2, the GetEmployees method returns all the employees in the company.
Figure 1. It will launch the Data Source Configuration Wizard. Select Object item on the first page. See Figure 2.
Figure 2. Now on next screen you should see your application namespace. If you dont see the namespace, make sure to Rebuild the application. If you expand the namespace, you should see Employee class. See Figure 3. Select Employee and click Next and click Finish on the next screen.
Figure 3. Now you should see Employees in Data Sources window. See Figure 4.
Figure 4. Note: When you add a DataSource to the project, the designer adds the EmployeeBindingSource to the designer, which will play a major role later.
Figure 5. Now you can format the table the way you want by right clicking on the table, column, or a cell and select Properties item.
10
Figure 6.
11
The Data
I have an XML file Data.xml, which looks like this: <?xml version="1.0" encoding="utf-8" ?> - <Company> - <Employees> <Employee Name="Mahesh Chand" Age="30" Phone="6101233333" /> <Employee Name="Rose Garner" Age="56" Phone="2133428778" /> <Employee Name="Amger Jap" Age="22" Phone="9092349800" /> <Employee Name="Mike Gold" Age="35" Phone="9908088823" /> <Employee Name="Renee Flower" Age="19" Phone="4848901003" /> </Employees> </Company>
My first goal is to generate schema file, which will represent the data. I take help of the DataSet class and its method WriteXmlSchema. The code listed in Listing 1 reads the Data.xml file and generates a schema file called Data.xsd. This file is created in the Debug folder of your application. DataSet ds = new DataSet(); ds.ReadXml("Data.xml"); ds.WriteXmlSchema("Data.xsd"); Listing 1. Lets add Data.xsd file to your project. Right click on the project in Solution Explorer, select Add >> Existing Item and browse for Data.xsd file and add it to the project. Now lets Rebuild the project.
Now we will add a new report file to the project. Right click on the project in Solution Explorer and select Add >> New Item and select Report from the Items list. It will add Report1.rdlc file to the project. Once the report is added, our next step is to add a data source. First double click on the Form and select Data Menu item from the Main Menu. Click on Data Menu item and select Add New Data Source item. It will launch Data Source Configuration Wizard. Select Object from the list and click the Next button on the Wizard. See Figure 2.
12
Figure 2. On next dialog, you should see all namespaces and classes in your project. Expand your namespace and you will see class Company. See Figure 3.
13
Figure 3. Select Company class and click the Next button. On next dialog, you will see a confirmation message. Select Finish there and get out of the wizard. Now double click on the Report1.rdlc file and you should see Figure 4 in your Data Sources window.
14
Figure 4. Now lets create and format the report. Drag a Table from the Toolbox and drag Name, Age, and Phone columns from the Data Sources to the reports middle row. As you can see from Figure 5, the name of the column is automatically added to the header (first) row of the report.
Figure 5.
15
Figure 6. By doing so, you will see an EmployeeBindingSource control is added at the bottom of the Form. See Figure 7. The BindingSource control provides connection between the data and the ReportViewer control.
Figure 7.
Now write the code listed in Listing 2 on the Forms load event handler. This code creates a DataSet, loads the data from Data.xml file and sets EmployeeBindingSource.DataSource as DataSet. The last line is added by you by the designer. DataSet ds = new DataSet(); ds.ReadXml("Data.xml"); EmployeeBindingSource.DataSource = ds; this.reportViewer1.RefreshReport(); Listing 2.
Thats all. Build and run the application. The output should look like Figure 8.
16
Figure 8.
17
First of all, we need a typed DataSet that will represent the data types. You can generate a typed DataSet from a database table, stored procedure, and a view or from a SQL query. After generating the typed DataSet, report generation is same. Right click on the project in Solution Explorer, select Add >> New Item and select DataSet from the list. Change DataSet1.xsd to Company.xsd. After adding the DataSet, you will see the designer. On the designer, click Server Explorer link, which will let you create a Database connection and can view database objects including tables, views, and stored procedures. Drag a database table, or view, or stored procedure where you want to display the data from and it will create a DataSet schema for you. Once you have a typed DataSet, just follow these steps. Before that, make sure you Rebuild the project.
Now we will add a new report file to the project. Right click on the project in Solution Explorer and select Add >> New Item and select Report from the Items list. It will add Report1.rdlc file to the project. Once the report is added, our next step is to add a data source. First double click on the Form and select Data Menu item from the Main Menu. Click on Data Menu item and select Add New Data Source item. It will launch Data Source Configuration Wizard. Select Object from the list and click the Next button on the Wizard. See Figure 2.
18
Figure 2. On next dialog, you should see all namespaces and classes in your project. Expand your namespace and you will see class Company. See Figure 3.
19
Figure 3. Select Company class and click the Next button. On next dialog, you will see a confirmation message. Select Finish there and get out of the wizard. Now double click on the Report1.rdlc file and you should see Figure 4 in your Data Sources window.
20
Figure 4. Now lets create and format the report. Drag a Table from the Toolbox and drag Name, Age, and Phone columns from the Data Sources to the reports middle row. As you can see from Figure 5, the name of the column is automatically added to the header (first) row of the report.
Figure 5.
21
Figure 6. By doing so, you will see an EmployeeBindingSource control is added at the bottom of the Form. See Figure 7. The BindingSource control provides connection between the data and the ReportViewer control.
Figure 7.
Now write the code listed in Listing 2 on the Forms load event handler. This code creates a DataSet, loads the data from Data.xml file and sets EmployeeBindingSource.DataSource as DataSet. The last line is added by you by the designer. DataSet ds = new DataSet(); ds.ReadXml("Data.xml"); EmployeeBindingSource.DataSource = ds; this.reportViewer1.RefreshReport(); Listing 2.
Thats all. Build and run the application. The output should look like Figure 8.
22
Figure 8.
23
Figure 1. I definite the following variable in the class: private bool firstFound = false; The following code written on the Find Button click event handler. private void FindButton_Click(object sender, EventArgs e) { if (firstFound) this.reportViewer1.FindNext(); else if (this.reportViewer1.Find(FindTextBox.Text, 1) >= 0) firstFound = true; } Now if I type Chand in the TextBox and click the Find button, the first row is selected. Clicking Find again select the next row that has text Chand in it. See Figure 2.
24
Figure 2.
25