chart

Introduction:

In our previous article we have seen in detail about how to draw Bar, Line and Pie Charts in MVC web Application. In this article we will see how to draw Bar and Line Chartsfor MVC applications using HTML5 Canvas, JQuery, WEB API and AngularJS.

In this series we will see one by one in detail starting from,

  1. MVC Dynamic Bar Chart using WEB API, AngularJS and JQuery
  2. MVC Dynamic Line Chart using WEB API, AngularJS and JQuery
  3. MVC Dynamic Pie Chart using WEB API, AngularJS and JQuery
  4. MVC Dynamic Line&Bar Chart using WEB API, AngularJS and JQuery
  5. MVC Dynamic Donut Chart using WEB API, AngularJS and JQuery
  6. MVC Dynamic Bubble Chart using WEB API, AngularJS and JQuery

Our Chart Features

Features

  1. Chart Source Data:

    Using WEB API and AngularJS we will be loading chart data from database to a Combobox. In our JQuery we will be plotting chart details from the Combobox.

  2. Chart Number of Category:

    Chart Items will be dynamically loaded from database. Here we will plot all the Items in Combobox. It’s good to plot fewer than 12 Items per chart.

  3. Chart Title Text:

    User can add their own Chart Title and dynamically change the titles if required. Here in our example we will draw the Title Textbox text at the Bottom of the Chart. (Users can redesign and customize as per requirements if needed).

  4. Chart Water Mark Text:

    In some cases we need to add our Company name as Water Mark to our Chart. Here in our example we will draw the Water mark Textbox text at the center of the Chart. (User can redesign and customize as per your requirements if needed).

  5. Chart Company LOGO:

    User can add their own Company logo to the Chart.(Here for sample we have added my own image as a Logo at the Top left corner.( User can redesign and customize as per your requirements if needed.).

  6. Chart Alert Image Display:

    If the “Alert On” radio button is checked we will display the Alert Image. If the “Alert Off” radio button is clicked then the Alert Image will not be displayed. In JQuery we have declared alertCheckValue = 90; and we check the plot data with this aleartcheckValue and if the plot value is greater than this check value then we will display the alert image in the legend.

    What is the use of Alert Image?

    Let’s consider a real time project. For example we need to display the chart for a Manufacturing factory with production result as Good and Bad. For example if production result for each quality value is above 90 we need to display the Alert green Image and if the quality value is below 90 then we need to display the Red Image with label bars.

    This Alert Image will be easy to identify each quality result with good or bad. (Here for a sample we have used for quality check and display green and red images, but users can customize as per your requirement and add your own image and logics.).

  7. Save Chart as Image: user can save the chart as Image.

  8. Chart Theme :

    Here we have created two themes, Blue and Green, for our Chart. We can see both theme outputs here. User can also add any numbers of themes as they require.

Blue Theme

Blue Theme

Green Theme

Green Theme

In this Article we have 2 parts,

Prerequisites

Visual Studio 2015: You can download it from here.

Code Part

In Code part we can see three Steps,

Step 1:

Explains about how to create a sample Database, Table, Stored procedure to select, Insert and Update Chart data to SQL Server.

Step 2:

Explains about how to create a WEB API to get the data and bind the result to MVC page using AngularJS.

Step 3: Explains about how to draw our own Chart to our MVC Web application using JQuery.

Step 1: Script to create Table and Stored Procedure

We will create aItemMaster table under the Database ‘ItemsDB. The following is the script to create a database, table and sample insert query. Run this script in your SQL Server. I have used SQL Server 2014.

  1. USEMASTER
  2. GO
  3. -- 1) Check for the Database Exists .If the database is exist then drop and create new DB
  4. IFEXISTS(SELECT [name] FROMsys.databasesWHERE [name] ='ItemsDB')
  5. DROPDATABASEItemsDB
  6. GO
  7. CREATEDATABASEItemsDB
  8. GO
  9. USEItemsDB
  10. GO
  11. -- 1) //////////// Item Masters
  12. IFEXISTS(SELECT [name] FROMsys.tablesWHERE [name] ='ItemMaster')
  13. DROPTABLEItemMaster
  14. GO
  15. CREATETABLE [dbo].[ItemMaster](
  16. [ItemID] INTIDENTITYPRIMARYKEY,
  17. [ItemName] [varchar](100)NOTNULL,
  18. [SaleCount] [varchar](10)NOTNULL
  19. )
  20. -- insert sample data to Item Master table
  21. INSERTINTOItemMaster([ItemName],[SaleCount])
  22. VALUES ('Item1','100')
  23. INSERTINTOItemMaster([ItemName],[SaleCount])
  24. VALUES ('Item2','82')
  25. INSERTINTOItemMaster([ItemName],[SaleCount])
  26. VALUES ('Item3','98')
  27. INSERTINTOItemMaster([ItemName],[SaleCount])
  28. VALUES ('Item4','34')
  29. INSERTINTOItemMaster([ItemName],[SaleCount])
  30. VALUES ('Item5','68')
  31. select*fromItemMaster
  32. -- 1)To Select Item Details
  33. -- Author : Shanu
  34. -- Create date : 2016-03-15
  35. -- Description :To Select Item Details
  36. -- Tables used :ItemMaster
  37. -- Modifier : Shanu
  38. -- Modify date : 2016-03-15
  39. -- =============================================
  40. -- To Select Item Details
  41. -- EXEC USP_Item_Select ''
  42. -- =============================================
  43. CREATEPROCEDURE [dbo].[USP_Item_Select]
  44. (
  45. @ItemName VARCHAR(100)=''
  46. )
  47. AS
  48. BEGIN
  49. SELECTItemName,
  50. SaleCount
  51. FROMItemMaster
  52. WHERE
  53. ItemNamelike @ItemName+'%'
  54. OrderBYItemName
  55. END
  56. GO
  57. -- 2) To Insert/Update Item Details
  58. -- Author : Shanu
  59. -- Create date : 2016-03-15
  60. -- Description :To Insert/Update Item Details
  61. -- Tables used :ItemMaster
  62. -- Modifier : Shanu
  63. -- Modify date : 2016-03-15
  64. -- =============================================
  65. -- To Insert/Update Item Details
  66. -- EXEC USP_Item_Edit ''
  67. -- =============================================
  68. CREATEPROCEDURE [dbo].[USP_Item_Edit]
  69. (
  70. @ItemName VARCHAR(100)='',
  71. @SaleCount VARCHAR(10)=''
  72. )
  73. AS
  74. BEGIN
  75. IFNOTEXISTS(SELECT*FROMItemMasterWHEREItemName=@ItemName)
  76. BEGIN
  77. INSERTINTOItemMaster([ItemName],[SaleCount])
  78. VALUES (@ItemName,@SaleCount)
  79. Select'Inserted'as results
  80. return;
  81. END
  82. ELSE
  83. BEGIN
  84. UpdateItemMasterSET
  85. SaleCount=@SaleCount
  86. WHEREItemName=@ItemName
  87. Select'Updated'as results
  88. return;
  89. END
  90. Select'Error'as results
  91. END
  92. -- 3)To Max and Min Value
  93. -- Author : Shanu
  94. -- Create date : 2016-03-15
  95. -- Description :To Max and Min Value
  96. -- Tables used :ItemMaster
  97. -- Modifier : Shanu
  98. -- Modify date : 2016-03-15
  99. -- =============================================
  100. -- To Max and Min Value
  101. -- EXEC USP_ItemMaxMin_Select ''
  102. -- =============================================
  103. CREATEPROCEDURE [dbo].[USP_ItemMaxMin_Select]
  104. (
  105. @ItemName VARCHAR(100)=''
  106. )
  107. AS
  108. BEGIN
  109. SELECTMIN(convert(int,SaleCount))asMinValue,
  110. MAX(convert(int,SaleCount))asMaxValue
  111. FROMItemMaster
  112. WHERE
  113. ItemNamelike @ItemName+'%'
  114. END
  115. GO
Step 2: Create your MVC Web Application in Visual Studio 2015

After installing our Visual Studio 2015 click Start, then Programs and select Visual Studio 2015 - Click Visual Studio 2015. Click New, then Project, select Web and then select ASP.NET Web Application. Enter your project name and click OK.

new

Select MVC, WEB API and click OK.

mvc

Now we have created our MVC Application as a next step we add our SQL server database as Entity Data Model to our application.

Add Database using ADO.NET Entity Data Model

Right click our project and click Add -> New Item.

Select Data->Select ADO.NET Entity Data Model> Give the name for our EF and click Add,

add

Select EF Designer from database and click next.

EF Designer

Here click New Connection and provide your SQL-Server Server Name and connect to your database.

Here we can see we have given our SQL server name, Id and PWD and after it connects we have selected the data base as ItemsDB as we have created the Database using my SQL Script.

Connection

Click next and select our tables that need to be used and click finish.

choose

Here we can see we have selected our table ItemMasters and all needed Stored Procedures; after selecting click Finish

table

Once Entity has been created the next stepis we add WEB API to our controller and write function to select/Insert/Update and Delete.

Steps to add our WEB API Controller

Right Click Controllers folder-> Click Add-> Click Controller.

As we are going to create our WEB API Controller.Select Controller and Add Empty WEB API 2 Controller. Give your Name to Web API controller and click ok. Here for my Web API Controller I have given name as “StudentsController”.

StudentsController

As we all know Web API is a simple and easy to build HTTP Services for Browsers and Mobiles.

Web API has four methods as Get/Post/Put and Deletewhere:
  • Get is to request for the data. (Select).
  • Post is to create a data. (Insert).
  • Putis to update the data.
  • Delete is to delete data.
In our example we will use both Get and Post as we need to get all image name sand descriptions from database and to insert new Image Name and Image Description to database.

Get Method

In our example I have used only Get method as I am using only Stored Procedure. We need to create object for our Entity and write our Get Method to perform Select/Insert/Update and Delete operations.

Select Operation

We use get Method to get all the details of itemMaster table using entity object and we return the result as IEnumerable .We use this method in our AngularJS and bind the result in ComboBox and insert the new chart Item to Database using the Insert Method.
  1. publicclassItemAPIController: ApiController
  2. {
  3. ItemsDBEntitiesobjapi = newItemsDBEntities();
  4. // To get all Item chart detaiuls
  5. [HttpGet]
  6. publicIEnumerable < USP_Item_Select_Result > getItemDetails(stringItemName)
  7. {
  8. if (ItemName == null)
  9. ItemName = "";
  10. returnobjapi.USP_Item_Select(ItemName).AsEnumerable();
  11. }
  12. // To get maximum and Minimum value
  13. [HttpGet]
  14. publicIEnumerable < USP_ItemMaxMin_Select_Result > getItemMaxMinDetails(stringItemNM)
  15. {
  16. if (ItemNM == null)
  17. ItemNM = "";
  18. returnobjapi.USP_ItemMaxMin_Select(ItemNM).AsEnumerable();
  19. }
  20. // To Insert/Update Item Details
  21. [HttpGet]
  22. publicIEnumerable < string > insertItem(stringitemName, stringSaleCount)
  23. {
  24. returnobjapi.USP_Item_Edit(itemName, SaleCount).AsEnumerable();
  25. }
  26. }
Now we have created our Web API Controller Class. Next step we need to create our AngularJs Module and Controller. Let’s see how to create our AngularJS Controller. In Visual Studio 2015 it’s much easy to add our AngularJsController. Let’s see step by Step on how to create and write our AngularJs Controller.

Creating AngularJS Controller

First create a folder inside the Script Folder and we give the folder name as “MyAngular”.

Now add your Angular Controller inside the folder.

Right Click the MyAngular Folder and click Add and New Item > Select Web > Select AngularJs Controller and give name to Controller.We have given my AngularJs Controller as “Controller.js”

add

If the Angular JS package is missing then add the package to your project.

Right Click your MVC project and Click-> Manage NuGet Packages. Search for AngularJs and click Install.

install

Modules.js: Here we will add the reference to the AngularJS JavaScript and create an Angular Module named,
  1. “AngularJs_Module”.
  2. // <reference path="../angular.js" />
  3. /// <reference path="../angular.min.js" />
  4. /// <reference path="../angular-animate.js" />
  5. /// <reference path="../angular-animate.min.js" />
  6. var app;
  7. (function()
  8. {
  9. app = angular.module("AngularJs_Module", ['ngAnimate']);
  10. })();

Controllers: In AngularJS Controller I have done all the business logic and returned the data from Web API to our MVC HTML page.

  1. Variable declarations

    Firstly, we declared all the local variables need to be used.


    1. app.controller("AngularJs_Controller", function($scope, $timeout, $rootScope, $window, $http, FileUploadService)
    2. {
    3. $scope.date = newDate();
    4. // <reference path="../angular.js" />
    5. /// <reference path="../angular.min.js" />
    6. /// <reference path="../angular-animate.js" />
    7. /// <reference path="../angular-animate.min.js" />
    8. var app;
    9. (function()
    10. {
    11. app = angular.module("RESTClientModule", ['ngAnimate']);
    12. })();
    13. app.controller("AngularJs_Controller", function($scope, $timeout, $rootScope, $window, $http)
    14. {
    15. $scope.date = newDate();
    16. $scope.MyName = "shanu";
    17. $scope.sItemName = "";
    18. $scope.itemCount = 5;
    19. $scope.selectedItem = "";
    20. $scope.chartTitle = "SHANU Pie Chart";
    21. $scope.waterMark = "SHANU";
    22. $scope.ItemValues = 0;
    23. $scope.ItemNames = "";
    24. $scope.showItemAdd = false;
    25. $scope.minsnew = 0;
    26. $scope.maxnew = 0;
    27. }
  2. Methods

    Select Method

    Select Method

    Here we get all the data from WEB API and bind the result to our ComboBox and we have used another method to get the maximum and Minimum Value of Chart Value and bind in hidden field.
    1. // This method is to get all the Item Details to bind in Combobox for plotting in Graph
    2. selectuerRoleDetails($scope.sItemName);
    3. // This method is to get all the Item Details to bind in Combobox for plotting in Graph
    4. functionselectuerRoleDetails(ItemName)
    5. {
    6. $http.get('/api/ItemAPI/getItemDetails/',
    7. {
    8. params:
    9. {
    10. ItemName: ItemName
    11. }
    12. }).success(function(data)
    13. {
    14. $scope.itemData = data;
    15. $scope.itemCount = $scope.itemData.length;
    16. $scope.selectedItem = $scope.itemData[0].SaleCount;
    17. })
    18. .error(function()
    19. {
    20. $scope.error = "An Error has occured while loading posts!";
    21. });
    22. $http.get('/api/ItemAPI/getItemMaxMinDetails/',
    23. {
    24. params:
    25. {
    26. ItemNM: $scope.sItemName
    27. }
    28. }).success(function(data)
    29. {
    30. $scope.itemDataMaxMin = data;
    31. $scope.minsnew = $scope.itemDataMaxMin[0].MinValue;
    32. $scope.maxnew = $scope.itemDataMaxMin[0].MaxValue;
    33. })
    34. .error(function()
    35. {
    36. $scope.error = "An Error has occured while loading posts!";
    37. });
    38. }
    Insert Method

    User can Insert or update Chart Item value by clicking Add Chart Item Details. After validation we pass the Chart Item name and Value to WEB API method to insert in to our database.

     Insert Method

    1. //Save File
    2. $scope.saveDetails = function()
    3. {
    4. $scope.IsFormSubmitted = true;
    5. $scope.Message = "";
    6. if ($scope.ItemNames == "")
    7. {
    8. alert("Enter Item Name");
    9. return;
    10. }
    11. if ($scope.ItemValues == "")
    12. {
    13. alert("Enter Item Value");
    14. return;
    15. }
    16. if ($scope.IsFormValid)
    17. {
    18. alert($scope.ItemNames);
    19. $http.get('/api/ItemAPI/insertItem/',
    20. {
    21. params:
    22. {
    23. itemName: $scope.ItemNames,
    24. SaleCount: $scope.ItemValues
    25. }
    26. }).success(function(data)
    27. {
    28. $scope.CharDataInserted = data;
    29. alert($scope.CharDataInserted);
    30. cleardetails();
    31. selectuerRoleDetails($scope.sItemName);
    32. })
    33. .error(function()
    34. {
    35. $scope.error = "An Error has occured while loading posts!";
    36. });
    37. } else
    38. {
    39. $scope.Message = "All the fields are required.";
    40. }
    41. };
    42. });

Step 3 : Todraw our Chart using JQuery to our MVC page Canvas Tag

Here we will see in detail about how to draw our Pie Chart on our MVC Web Application using JQuery.
Inside the java Script declare the global variables and initialize the Canvas in JavaScript. In the code we have used comments to easily understand the declarations.

Script Detail Explanations

Script Global variable

Chart Category Color Add


Adding the Chart category colors to array .Here we have fixed to 12 colors and 12 datas to add with Pie Chart. If you want you can add more from here. Here we have 2 sets of color combinations, one with Green base and one with a Blue base. User can add as per your requirement here.

  1. varpirChartColor = ["#6CBB3C", "#F87217", "#EAC117", "#EDDA74", "#CD7F32", "#CCFB5D", "#FDD017", "#9DC209", "#E67451", "#728C00", "#617C58", "#64E986"]; // green Color Combinations
  2. // varpirChartColor = ["#3090C7", "#BDEDFF", "#78C7C7", "#736AFF", "#7FFFD4", "#3EA99F", "#EBF4FA", "#F9B7FF", "#8BB381", "#BDEDFF", "#B048B5", "#4E387E"]; // Blue Color Combinations
  3. //This method will be used to check for user selected Color Theme and Change the color
  4. functionChangeChartColor()
  5. {
  6. if ($('#rdoColorGreen:checked').val() == "Green Theme")
  7. {
  8. pirChartColor = ["#6CBB3C", "#F87217", "#EAC117", "#EDDA74", "#CD7F32", "#CCFB5D", "#FDD017", "#9DC209", "#E67451", "#728C00", "#617C58", "#64E986"]; // green Color Combinations
  9. lineColor = "#3090C7"; // Blue Color for Line
  10. lineOuterCircleColor = "#6CBB3C"; // Green Color for Outer Circle
  11. } else
  12. {
  13. pirChartColor = ["#3090C7", "#BDEDFF", "#78C7C7", "#736AFF", "#7FFFD4", "#3EA99F", "#EBF4FA", "#F9B7FF", "#8BB381", "#BDEDFF", "#B048B5", "#4E387E"]; // Blue Color Combinations
  14. lineColor = "#F87217"; // Orange Color for the Line
  15. lineOuterCircleColor = "#F70D1A "; // Red Color for the outer circle
  16. }
  17. }
Method to get X plot and Y Plot Value: here we calculate to draw our Chart item in X and in Y Axis.
  1. // to return the x-Value
  2. functiongetXPlotvalue(val)
  3. {
  4. return (Math.round((chartWidth) / noOfPlots)) * val + (xSpace * 1.5) - 20;
  5. }
  6. // Return the y value
  7. functiongetYPlotVale(val)
  8. {
  9. returnchartHeight - (((chartHeight - xSpace) / maxDataVal) * val);
  10. }
Draw Legend:If the Show Legend radio button is clicked then we draw a Legend for our Chart item inside Canvas Tag and also in this method we check to display Alert Image or not.
  1. // This function is used to draw the Legend
  2. functiondrawLengends()
  3. {
  4. ctx.fillStyle = "#7F462C";
  5. ctx.fillRect(rect.startX, rect.startY, rect.w, rect.h);
  6. //Drawing Inner White color Rectange with in Above brown rectangle to plot all the Lables with color,Text and Value.
  7. ctx.fillStyle = "#FFFFFF";
  8. rectInner.startX = rect.startX + 1;
  9. rectInner.startY = rect.startY + 1;
  10. rectInner.w = rect.w - 2;
  11. rectInner.h = rect.h - 2;
  12. ctx.fillRect(rectInner.startX, rectInner.startY, rectInner.w, rectInner.h);
  13. labelBarX = rectInner.startX + 4;
  14. labelBarY = rectInner.startY + 4;
  15. labelBarWidth = rectInner.w - 10;
  16. labelBarHeight = (rectInner.h / noOfPlots) - 5;
  17. colorval = 0;
  18. // here to draw all the rectangle for Lables with Image display
  19. $('#DropDownList1 option').each(function()
  20. {
  21. ctx.fillStyle = pirChartColor[colorval];
  22. ctx.fillRect(labelBarX, labelBarY, labelBarWidth, labelBarHeight);
  23. // Here we check for the rdoAlert Status is On - If the Alert is on then we display the Alert Image as per the Alert check value.
  24. if ($('#rdoAlaramOn:checked').val() == "Alert On")
  25. {
  26. // Here we can see fo ever chart value we check with the condition .we have initially declare the alertCheckValue as 300.
  27. //so if the Chart Plot value is Greater then or equal to the check value then we display the Green Image else we display the Red Image.
  28. //user can change this to your requiremnt if needed.This is optioan function for the Pie Chart.
  29. if (parseInt($(this).val()) >= alertCheckValue)
  30. {
  31. ctx.drawImage(greenImage, labelBarX, labelBarY + (labelBarHeight / 3) - 4, imagesize, imagesize);
  32. } else {
  33. ctx.drawImage(redImage, labelBarX, labelBarY + (labelBarHeight / 3) - 4, imagesize, imagesize);
  34. }
  35. }
  36. //Draw the Pie Chart Label text and Value
  37. ctx.fillStyle = "#000000";
  38. ctx.font = '10pt Calibri';
  39. ctx.fillText($(this).text(), labelBarX + imagesize + 2, labelBarY + (labelBarHeight / 2));
  40. // To Increment and draw the next bar ,label Text and Alart Image.
  41. labelBarY = labelBarY + labelBarHeight + 4;
  42. // labelTextYXVal = labelBarY + labelBarHeight - 4;
  43. colorval = colorval + 1;
  44. });
  45. }
Draw Chart:

This is our main Function .Here we get all the details to draw our Bar and Line Chart. In this function we will draw Chart Title, Chart Water Mark text, Chart Logo Image and finally call draw Bar and Line chart Method to draw our combination of Bar & Line chart inside Canvas Tag.
  1. // This is the main function to darw the Charts
  2. functiondrawChart() {
  3. ChangeChartColor();
  4. // asign the images path for both Alert images
  5. greenImage.src = '../images/Green.png';
  6. redImage.src = '../images/Red.png';
  7. LogoImage.src = '../images/shanu.jpg';
  8. // Get the minumum and maximum value.herei have used the hidden filed from code behind wich will stored the Maximum and Minimum value of the Drop down list box.
  9. minDataVal = $('input:text[name=hidListMin]').val();
  10. maxDataVal = $('input:text[name=hidListMax]').val();
  11. // Total no of plots we are going to draw.
  12. noOfPlots = $("#DropDownList1 option").length;
  13. maxValdivValue = Math.round((maxDataVal / noOfPlots));
  14. //storing the Canvas Context to local variable ctx.This variable will be used to draw the Pie Chart
  15. canvas = document.getElementById("canvas");
  16. ctx = canvas.getContext("2d");
  17. //globalAlpha - > is used to display the 100% opoacity of chart .because at the bottom of the code I have used the opacity to 0.1 to display the water mark text with fade effect.
  18. ctx.globalAlpha = 1;
  19. ctx.fillStyle = "#000000";
  20. ctx.strokeStyle = '#000000';
  21. //Every time we clear the canvas and draw the chart
  22. ctx.clearRect(0, 0, canvas.width, canvas.height);
  23. //If need to draw with out legend for the Line Chart
  24. chartWidth = canvas.width - xSpace;
  25. chartHeight = canvas.height - ySpace;
  26. // step 1) Draw legend $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$########################
  27. if ($('#chkLegend:checked').val() == "Show Legend") {
  28. chartWidth = canvas.width - ((canvas.width / 3) - (xSpace / 2));
  29. chartHeight = canvas.height - ySpace - 10;
  30. legendWidth = canvas.width - ((canvas.width / 3) - xSpace);
  31. legendHeight = ySpace;
  32. rect.startX = legendWidth;
  33. rect.startY = legendHeight;
  34. rect.w = canvas.width / 3 - xSpace - 10;
  35. rect.h = canvas.height - ySpace - 10;
  36. //In this method i will draw the legend with the Alert Image.
  37. drawLengends();
  38. }
  39. // end step 1) $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  40. varchartMidPosition = chartWidth / 2 - 60;
  41. //// //If need to draw with legend
  42. //// chartWidth = canvas.width - ((canvas.width / 3) - (xSpace / 2));
  43. //// chartHeight = canvas.height - ySpace - 10;
  44. // Step 2 ) +++++++++++++ To Add Chart Titel and Company Logo
  45. //To Add Logo to Chart
  46. varlogoXVal = canvas.width - LogoImgWidth - 10;
  47. varlogolYVal = 0;
  48. //here we draw the Logo for teh chart and i have used the alpha to fade and display the Logo.
  49. ctx.globalAlpha = 0.6;
  50. ctx.drawImage(LogoImage, logoXVal, logolYVal, LogoImgWidth, LogoImgHeight);
  51. ctx.globalAlpha = 1;
  52. ctx.font = '22pt Calibri';
  53. ctx.fillStyle = "#15317E";
  54. vartitletxt = $('input:text[name=txtTitle]').val();
  55. ctx.fillText(titletxt, chartMidPosition, chartHeight + 60);
  56. ctx.fillStyle = "#000000";
  57. ctx.font = '10pt Calibri';
  58. // end step 2) +++++++++++ End of Title and Company Logo Add
  59. // Step 3 ) +++++++++++++ toDraw the X-Axis and Y-Axis
  60. // >>>>>>>>> Draw Y-Axis and X-Axis Line(Horizontal Line)
  61. // Draw the axises
  62. ctx.beginPath();
  63. ctx.moveTo(xSpace, ySpace);
  64. // first Draw Y Axis
  65. ctx.lineTo(xSpace, chartHeight);
  66. // Next draw the X-Axis
  67. ctx.lineTo(chartWidth, chartHeight);
  68. ctx.stroke();
  69. // >>>>>>>>>>>>> End of X-Axis Line Draw
  70. //end step 3) +++++++++++++++++++++++
  71. // Step 4) <<<<<<<<<<<<<<<<<<<<<<< To Draw X - Axis Plot Values <<<<<<<<<<<<< }}}}}}
  72. // Draw the X value texts
  73. // --->>>>>>>>>>>> for the Bar Chart i have draw the X-Axis plot in with drawBarChart
  74. // <<<<<<<<<<<<<<<<<<<<<<< End of X Axis Draw
  75. // end Step 4) <<<<<<<<<<<<<<<<<<<<<<<
  76. // Step 5){{{{{{{{{{{{
  77. // {{{{{{{{{{{{{To Draw the Y Axis Plot Values}}}}}}}}}}}}}}
  78. varvAxisPoints = 0;
  79. var max = maxDataVal;
  80. max += 10 - max % 10;
  81. for (vari = 0; i <= maxDataVal; i += maxValdivValue) {
  82. ctx.fillStyle = fotnColor;
  83. ctx.font = axisfontSize + 'pt Calibri';
  84. ctx.fillText(i, xSpace - 40, getYPlotVale(i));
  85. //Here we draw the Y-Axis point line
  86. ctx.beginPath();
  87. ctx.moveTo(xSpace, getYPlotVale(i));
  88. ctx.lineTo(xSpace - 10, getYPlotVale(i));
  89. ctx.stroke();
  90. vAxisPoints = vAxisPoints + maxValdivValue;
  91. }
  92. //}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
  93. //Step 5) *********************************************************
  94. //Function to Draw our Chart here we can Call/Bar Chart/Line Chart or Pie Chart
  95. // to Draw Bar Chart
  96. drawBarChart();
  97. // to Draw line Chart
  98. drawLineChart();
  99. // end step 6) **************
  100. //Step 7) :::::::::::::::::::: to add the Water mark Text
  101. varwaterMarktxt = $('input:text[name=txtWatermark]').val();
  102. // Here add the Water mark text at center of the chart
  103. ctx.globalAlpha = 0.1;
  104. ctx.font = '86pt Calibri';
  105. ctx.fillStyle = "#000000";
  106. ctx.fillText(waterMarktxt, chartMidPosition - 40, chartHeight / 2);
  107. ctx.font = '10pt Calibri';
  108. ctx.globalAlpha = 1;
  109. /// end step 7) ::::::::::::::::::::::::::::::::::::::
  110. }
DrawBar and LineChart:In this function we get all item names and values using foreachof ComboBoxand here we plot all values and draw Bar and Line chart using the ComboBoxvalues. First we draw the Bar Chart and next we will draw our Line Chart on the same Canvas to display the combination of both Bar and Line Chart.
  1. functiondrawBarChart()
  2. {
  3. varXvalPosition = xSpace;
  4. widthcalculation = parseInt(((parseInt(chartWidth) - 100) / noOfPlots));
  5. colorval = 0;
  6. varcountval = 0;
  7. $('#DropDownList1').val($('#DropDownList1 option').eq(0).val());
  8. $('#DropDownList1 option').each(function(i)
  9. {
  10. // alert($(this).text() + " : " + $(this).val());
  11. // Draw Xaxis Plots Line and Text ***********
  12. XvalPosition = XvalPosition + widthcalculation;
  13. ctx.moveTo(XvalPosition, chartHeight);
  14. ctx.lineTo(XvalPosition, chartHeight + 15);
  15. ctx.stroke();
  16. ctx.fillStyle = "#000000";
  17. ctx.font = '10pt Calibri';
  18. ctx.fillText($(this).text(), XvalPosition - 28, chartHeight + 24);
  19. // EndXval Plotting ************
  20. //Draw Bar Graph **************==================********************
  21. varbarRatio = parseInt($(this).val()) / maxDataVal;
  22. //alert(ratio)
  23. varbarfillHeight = parseInt(barRatio * (parseInt(chartHeight - xSpace)));
  24. // alert(barHeight)
  25. ctx.fillRect(XvalPosition - widthcalculation - 1, chartHeight - 1, widthcalculation + 2, -barfillHeight);
  26. ctx.fillStyle = pirChartColor[colorval];
  27. // e.DrawRectangle(B1pen, XvalPosition_Start, Ystartval, XvalPosition_new, YEndval);
  28. ctx.fillRect(XvalPosition - widthcalculation, chartHeight, widthcalculation, -barfillHeight);
  29. //ctx.fillRect(XvalPosition - widthcalculation, yLineHeight, widthcalculation, yLineHeight- parseInt($(this).val()));
  30. // *****
  31. ctx.fillStyle = "#000000";
  32. ctx.font = '10pt Calibri';
  33. ctx.fillText($(this).val(), XvalPosition - widthcalculation + 4, chartHeight - barfillHeight - 8);
  34. ctx.fillStyle = pirChartColor[colorval];
  35. //END Draw Bar Graph **************==================********************
  36. colorval = colorval + 1;
  37. });
  38. }
  39. functiondrawLineChart() {
  40. // For Drawing Line
  41. ctx.lineWidth = 3;
  42. var value = $('select#DropDownList1 option:selected').val();
  43. ctx.beginPath();
  44. // *************** To Draw the Line and Plot Value in Line
  45. ctx.fillStyle = "#FFFFFF";
  46. ctx.strokeStyle = '#FFFFFF';
  47. ctx.moveTo(getXPlotvalue(0), getYPlotVale(value));
  48. ctx.fillStyle = "#000000";
  49. ctx.font = '12pt Calibri';
  50. ctx.fillText(value, getXPlotvalue(0), getYPlotVale(value) - 12);
  51. varival = 0;
  52. $('#DropDownList1').val($('#DropDownList1 option').eq(0).val());
  53. $('#DropDownList1 option').each(function(i) {
  54. if (ival > 0) {
  55. ctx.lineTo(getXPlotvalue(ival) - 4, getYPlotVale($(this).val()));
  56. ctx.stroke();
  57. ctx.fillStyle = "#000000";
  58. ctx.font = '12pt Calibri';
  59. ctx.fillText($(this).val(), getXPlotvalue(ival) - 4, getYPlotVale($(this).val()) - 16);
  60. }
  61. ival = ival + 1;
  62. ctx.fillStyle = lineColor;
  63. ctx.strokeStyle = lineColor;
  64. });
  65. // *************** To Draw the Line Dot Cericle
  66. //For Outer Blue Dot
  67. ival = 0;
  68. $('#DropDownList1 option').each(function(i)
  69. {
  70. ctx.fillStyle = lineOuterCircleColor;
  71. ctx.strokeStyle = lineOuterCircleColor;
  72. ctx.beginPath();
  73. ctx.arc(getXPlotvalue(ival), getYPlotVale($(this).val()), 7, 0, Math.PI * 2, true);
  74. ctx.fill();
  75. ctx.fillStyle = lineInnerCircleColor;
  76. ctx.strokeStyle = lineInnerCircleColor;
  77. ctx.beginPath();
  78. ctx.arc(getXPlotvalue(ival), getYPlotVale($(this).val()), 4, 0, Math.PI * 2, true);
  79. ctx.fill();
  80. ival = ival + 1;
  81. });
  82. ctx.lineWidth = 1;
  83. }
Note

Run the SQL Script in your SQL Server to created DB, Table and stored procedure. Inweb.config change the connection string to your local SQL Server connection. In the attached zip file you can find code for Bar, Line and Pie, Bar& Line Chart.

Tested Browsers
Read more articles on ASP.NET: