5,427,813 members and growing! (14,900 online)
Email Password   helpLost your password?
Languages » C# » Windows Forms     Intermediate

Reporting in Windows.Forms

By pablojag

Clean, fast and easy way to deliver data from objects
C#, HTML, Windows, .NET 1.1, .NETVisual Studio, VS.NET2003, IE, Dev

Posted: 3 Nov 2004
Updated: 3 Nov 2004
Views: 27,529
Bookmarked: 13 times
Announcements
Want a new Job?



Search    
Advanced Search
Sitemap
12 votes for this Article.
Popularity: 2.80 Rating: 2.59 out of 5
9 votes, 75.0%
1
1 vote, 8.3%
2
1 vote, 8.3%
3
0 votes, 0.0%
4
1 vote, 8.3%
5

Sample Image - Reporting__WindowsForms.gif

Introduction

Sometimes Crystal reports is not easy to use and it does not deliver output just the way we want.

To work around this problem, we just need an HTML template file and a parser class that reads this file and calls the appropriate methods in our classes to deliver dynamic data.

Using the code

The application posted in this article contains a Windows Forms project written in C#. It includes a kind of dumy class Personswhich groups attributes like Name, Last Name, Bitrh, gender, email and country. The data contained in the objects of this class is the one we want to print in an HTML report. It is only a structure, but I think it works to explain the solution.

The last class HTMLReport parses the HTML Template file in its Generate method and calls the Report(string data) of the object passed as an argument every time it finds a string with the form "<@Data_To_Report>". This string must be included as a case in switch instruction of the Report Method.

For example, if the parser finds in the HTML template the code:

<@FullName>

The parser will get <@FullName> and send it as a parameter to the method Report() of the class Person which has some code like this:

switch (data)
         {
            case"<@FullName>":
               return mName + " " + mLast;
            ....
            ....
            ....
        }

Finally, the parser will make a new HTML file with the html design it found in the template and the string the class Person returns. Just like this:

<h2><Somebody's name Somebody's last name</h2> 

The idea of Form1.cs is only to illustrate a GUI that fills data in the Person class. The event click of the button has this code:

        //Create the object person and assign the values

         Persons newPerson = new Persons();
         newPerson.Name = txtName.Text;
         newPerson.Last = txtLast.Text;
         newPerson.Country = comboCountry.SelectedItem.ToString();
         newPerson.IsMale = radMale.Checked;
         newPerson.Email = txtEmail.Text;
         newPerson.BirthDate = Convert.ToDateTime( txtBirthDate.Text);

         //Create the object Report and assign object to report

         HTMLReport html = new HTMLReport(); 
         //Assign the template file 

         html.Template = "GeneralTemplate.htm";
         //Asign the new file name

         html.FileName = newPerson.Name; 
         //Generate the new Page and open it. It uses default browser

         System.Diagnostics.Process.Start(html.Generate(newPerson));

One of the biggest improvements of this aproach is that whenever you want to change the format or the order reported data, it is as easy as to edit an HTML page. There are a lot of HTML editors we can use, but I still prefer notepad.

More than a solution to a specific problem, I see this as a framework. It means you should read this article as a way to work whenever you need to deliver data from your objects in a nice, cheap and clean way. Clearly, you must rewrite the code to your specific needs, but you could follow the same pattern for printing data from your objects.

History

This is just version 1.0. next time I will try to illustrate an example of objects with complex data types like typed Datasets.

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

About the Author

pablojag


Pablo studied Information System Engineering and graduated on may 2001 although he always had the idea of becoming a writer, idea that has not escaped from sight. At the present he works as a software developer leader in a Insurance Company in the team of Systems for Sale Force developing tools for policy selling. He has experience with Dot Net since May 2002 and has reached the third Start recognition from MSDN Latin America. He has knowledge in Compact Framework, Windows Forms and Asp Net. Pablo looks forward that his contributions in this forums help the comunity at the Code Project.
Occupation: Web Developer
Location: Mexico Mexico

Other popular C# articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 3 of 3 (Total in Forum: 3) (Refresh)FirstPrevNext
Subject  Author Date 
GeneralImagesmemberSanti Serrano9:33 21 Jul '06  
GeneralAnother Optionsussronnyek9:14 3 Nov '04  
GeneralRe: Another OptionmemberWillemM9:30 17 Nov '04  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 3 Nov 2004
Editor: Nishant Sivakumar
Copyright 2004 by pablojag
Everything else Copyright © CodeProject, 1999-2008
Web09 | Advertise on the Code Project