Background

Sometimes we need to show data in a chart like a Pie chart, such as to show quarterly data and on, so by considering the preceding requirement and to introduce the ASP.Net Pie Chart controls I have decided to write this article.

Let us learn about the ASP.Net chart type Pie chart that provides a powerful UI and design quality. We will learn about these chart type controls step-by-step. All the charts are in the System.Web.UI.DataVisualization.Charting namespace.
Chart data is represented using the following points:
  1. X Axis: the horizontal line of the chart termed the X axis
  2. Y Axis: the vertical line of the chart termed the Y axis

Now let us learn about the properties of the Pie chart. A Pie chart type has the following common properties:

  • AlternetText: Sets the alternate text when the image is not available
  • Annotation: Stores the chart annotations
  • AntiAliasing: sets a value that determines whether anti-aliasing is used when text and graphics are drawn
  • BackGradientStyle: sets the orientation for the background gradient for the Chart control. Also determines whether a gradient is used, the default is None
  • Backcolor: sets the background color for a chart, the default color is White
  • BackImage: sets the background image for the chart control.
  • BackHatchStyle: sets the hatching style for the chart control, the default is None.
  • Height: Sets the height for the chart control
  • Width: Sets the width for the chart control
  • Palette: Sets the style with the color for the chart control, the default style is Chocolate.
  • PaletteCustomColors: Sets the custom color for the chart control.
  • Series: Sets the series collection for the chart control
  • Legends: Sets the series of legends to the chart

Now let us show the preceding explanation with a practical example by creating a simple web application.

Step 1: Create the table for the chart data
Now before creating the application, let us create a table named QuarterwiseSale in a database from where we show the records in the chart using the following script:
  1. CREATE TABLE [dbo].[QuarterwiseSale](
  2. [id] [int] IDENTITY(1,1) NOT NULL,
  3. [Quarter] [varchar](50) NULL,
  4. [SalesValue] [money] NULL,
  5. CONSTRAINT [PK_QuarterwiseSale] PRIMARY KEY CLUSTERED
  6. (
  7. [id] ASC
  8. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  9. ) ON [PRIMARY]
The table has the following fields (shown in the following image):
Now insert some records using the following script:
  1. SET IDENTITY_INSERT [dbo].[QuarterwiseSale] ON
  2. GO
  3. INSERT [dbo].[QuarterwiseSale] ([id], [Quarter], [SalesValue]) VALUES (1, N'Q1', 100.0000)
  4. GO
  5. INSERT [dbo].[QuarterwiseSale] ([id], [Quarter], [SalesValue]) VALUES (2, N'Q2', 50.0000)
  6. GO
  7. INSERT [dbo].[QuarterwiseSale] ([id], [Quarter], [SalesValue]) VALUES (3, N'Q3', 150.0000)
  8. GO
  9. INSERT [dbo].[QuarterwiseSale] ([id], [Quarter], [SalesValue]) VALUES (4, N'Q4', 200.0000)
  10. GO
  11. SET IDENTITY_INSERT [dbo].[QuarterwiseSale] OFF
  12. GO
Now the records will look as in the list in the following image:
Now create the Stored Procedure to fetch the records from database as in the following:
  1. Create Procedure [dbo].[GetSaleData]
  2. (
  3. @id int=null
  4. )
  5. as
  6. begin
  7. Select Quarter,SalesValue from QuarterwiseSale
  8. End
I hope you have the same type of table and records as above.
Step: 2 Create Web Application

Now create the project using the following:
  1. "Start" - "All Programs" - "Microsoft Visual Studio 2010".

  2. "File" - "New Project" - "C#" - "Empty Project" (to avoid adding a master page).

  3. Provide the project a name such as UsingPieChart or another as you wish and specify the location.

  4. Then right-click on Solution Explorer and select "Add New Item" then select Default.aspx page.

  5. Drag and Drop a Chart control from the ToolBox onto the Default.aspx page.
Now the Default.aspx source code will be as follows:
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
  2. <%@ Register Assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
  3. Namespace="System.Web.UI.DataVisualization.Charting" TagPrefix="asp" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head runat="server">
  7. <title>Article by Vithal Wadje</title>
  8. </head>
  9. <body bgcolor="Navy">
  10. <form id="form1" runat="server">
  11. <h4 style="color: White;">
  12. Article for C#Corner
  13. </h4>
  14. <asp:Chart ID="Chart1" runat="server" BackColor="0, 0, 64" BackGradientStyle="LeftRight"
  15. BorderlineWidth="0" Height="360px" Palette="None" PaletteCustomColors="Maroon"
  16. Width="380px" BorderlineColor="64, 0, 64">
  17. <Titles>
  18. <asp:Title ShadowOffset="10" Name="Items" />
  19. </Titles>
  20. <Legends>
  21. <asp:Legend Alignment="Center" Docking="Bottom" IsTextAutoFit="False" Name="Default"
  22. LegendStyle="Row" />
  23. </Legends>
  24. <Series>
  25. <asp:Series Name="Default" />
  26. </Series>
  27. <ChartAreas>
  28. <asp:ChartArea Name="ChartArea1" BorderWidth="0" />
  29. </ChartAreas>
  30. </asp:Chart>
  31. </form>
  32. </body>
  33. </html>
Create a method to bind the chart control. Then open the default.aspx.cs page and create the following function named Bindchart to bind the Chart Control as in the following:
  1. private void Bindchart()
  2. {
  3. connection();
  4. com = new SqlCommand("GetSaleData", con);
  5. com.CommandType = CommandType.StoredProcedure;
  6. SqlDataAdapter da = new SqlDataAdapter(com);
  7. DataSet ds = new DataSet();
  8. da.Fill(ds);
  9. DataTable ChartData = ds.Tables[0];
  10. //storing total rows count to loop on each Record
  11. string[] XPointMember = new string[ChartData.Rows.Count];
  12. int[] YPointMember = new int[ChartData.Rows.Count];
  13. for (int count = 0; count < ChartData.Rows.Count; count++)
  14. {
  15. //storing Values for X axis
  16. XPointMember[count] = ChartData.Rows[count]["Quarter"].ToString();
  17. //storing values for Y Axis
  18. YPointMember[count] = Convert.ToInt32(ChartData.Rows[count]["SalesValue"]);
  19. }
  20. //binding chart control
  21. Chart1.Series[0].Points.DataBindXY(XPointMember, YPointMember);
  22. //Setting width of line
  23. Chart1.Series[0].BorderWidth = 10;
  24. //setting Chart type
  25. Chart1.Series[0].ChartType = SeriesChartType.Pie;
  26. foreach (Series charts in Chart1.Series)
  27. {
  28. foreach (DataPoint point in charts.Points)
  29. {
  30. switch (point.AxisLabel)
  31. {
  32. case "Q1": point.Color = Color.RoyalBlue; break;
  33. case "Q2": point.Color = Color.SaddleBrown; break;
  34. case "Q3": point.Color = Color.SpringGreen; break;
  35. }
  36. point.Label = string.Format("{0:0} - {1}", point.YValues[0], point.AxisLabel);
  37. }
  38. }
  39. //Enabled 3D
  40. // Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
  41. con.Close();
  42. }
Note that we have written a small code snippet to give the different color for each point as in the following:

  1. //To give different color for each point
  2. foreach (Series charts in Chart1.Series)
  3. {
  4. foreach (DataPoint point in charts.Points)
  5. {
  6. switch (point.AxisLabel)
  7. {
  8. case "Q1": point.Color = Color.RoyalBlue; break;
  9. case "Q2": point.Color = Color.SaddleBrown; break;
  10. case "Q3": point.Color = Color.SpringGreen; break;
  11. }
  12. point.Label = string.Format("{0:0} - {1}", point.YValues[0], point.AxisLabel);
  13. }
  14. }
Now, call the preceding function on page load as in the following:
  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. if (!IsPostBack)
  4. {
  5. Bindchart();
  6. }
  7. }
The entire code of the default.aspx.cs page will look as follows:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.Data.SqlClient;
  8. using System.Configuration;
  9. using System.Data;
  10. using System.Web.UI.DataVisualization.Charting;
  11. using System.Drawing;
  12. public partial class _Default : System.Web.UI.Page
  13. {
  14. private SqlConnection con;
  15. private SqlCommand com;
  16. private string constr, query;
  17. private void connection()
  18. {
  19. constr = ConfigurationManager.ConnectionStrings["getconn"].ToString();
  20. con = new SqlConnection(constr);
  21. con.Open();
  22. }
  23. protected void Page_Load(object sender, EventArgs e)
  24. {
  25. if (!IsPostBack)
  26. {
  27. Bindchart();
  28. }
  29. }
  30. private void Bindchart()
  31. {
  32. connection();
  33. com = new SqlCommand("GetSaleData", con);
  34. com.CommandType = CommandType.StoredProcedure;
  35. SqlDataAdapter da = new SqlDataAdapter(com);
  36. DataSet ds = new DataSet();
  37. da.Fill(ds);
  38. DataTable ChartData = ds.Tables[0];
  39. //storing total rows count to loop on each Record
  40. string[] XPointMember = new string[ChartData.Rows.Count];
  41. int[] YPointMember = new int[ChartData.Rows.Count];
  42. for (int count = 0; count < ChartData.Rows.Count; count++)
  43. {
  44. //storing Values for X axis
  45. XPointMember[count] = ChartData.Rows[count]["Quarter"].ToString();
  46. //storing values for Y Axis
  47. YPointMember[count] = Convert.ToInt32(ChartData.Rows[count]["SalesValue"]);
  48. }
  49. //binding chart control
  50. Chart1.Series[0].Points.DataBindXY(XPointMember, YPointMember);
  51. //Setting width of line
  52. Chart1.Series[0].BorderWidth = 10;
  53. //setting Chart type
  54. Chart1.Series[0].ChartType = SeriesChartType.Pie;
  55. foreach (Series charts in Chart1.Series)
  56. {
  57. foreach (DataPoint point in charts.Points)
  58. {
  59. switch (point.AxisLabel)
  60. {
  61. case "Q1": point.Color = Color.RoyalBlue; break;
  62. case "Q2": point.Color = Color.SaddleBrown; break;
  63. case "Q3": point.Color = Color.SpringGreen; break;
  64. }
  65. point.Label = string.Format("{0:0} - {1}", point.YValues[0], point.AxisLabel);
  66. }
  67. }
  68. //Enabled 3D
  69. // Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
  70. con.Close();
  71. }
  72. }
We now have the entire logic to bind the chart from the database, let us run the application. The chart will look as follows:
Now let us change the Point color as:
  1. foreach (Series charts in Chart1.Series)
  2. {
  3. foreach (DataPoint point in charts.Points)
  4. {
  5. switch (point.AxisLabel)
  6. {
  7. case "Q1": point.Color = Color.YellowGreen; break;
  8. case "Q2": point.Color = Color.Yellow; break;
  9. case "Q3": point.Color = Color.SpringGreen; break;
  10. }
  11. point.Label = string.Format("{0:0} - {1}", point.YValues[0], point.AxisLabel);
  12. }
  13. }
Now the chart will look as follows:
In the preceding chart we saw how the data is properly arranged with the user interactive graphics, now let us set the 3D style enabled as in the following:
  1. Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
Now the chart will look as follows:
Now change the Border width as:
  1. //Setting width of line
  2. Chart1.Series[0].BorderWidth = 4;
Now the chart will look as follows:

Now from all the preceding explanations we saw how to create and use a Pie type chart.

Notes
  • Download the Zip file from the attachment for the full source code of the application.
  • Change the connection string in the web.config file to specify your server location.
Summary
My next article explains another chart type of ASP.Net. I hope this article is useful for all readers, if you have any suggestion then please contact me including beginners also.