If you want to load a chart asynchronously in C# . NET, Google Chart Tools will be the perfect choice for you. It is easy to use and enough flexible to customize. Suppose you want to show how many students in your class like Pizza, Burger, Hotdog, and Fried Chicken in a Pie chart. Here I will show you how to load the students' data from server side using WebService and show it in a chart asynchronously.
First create a new WebService file suppose GoogleChart.asmx . In this file create a Public Class named FoodLikingCount
public class FoodLikingCount { public int PizzaCount { get; set; } public int BurgerCount { get; set; } public int HotdogCount { get; set; } public int FriedChickenCount { get; set; } }
After the class declaration add the following line
[System.Web.Script.Services.GenerateScriptType(typeof(FoodLikingCount))]
It will enable you to use the FoodLikingCount object in your Javascript code.
Create a new WebMethod in the WebService class named GetFoodLikingCountData
[WebMethod] public FoodLikingCount GetFoodLikingCountData() { FoodLikingCount countModel = new FoodLikingCount { PizzaCount = 12, BurgerCount = 16, HotdogCount = 8, FriedChickenCount = 4, }; // you can also load data from your database here return countModel ; }
Now come to client side code. Create an aspx file named GoogleChartToolTest.aspx and add this line between head tag.
<script src="https://www.google.com/jsapi" type="text/javascript"> </script>
Create a DIV element and give it an ID. This id will be required when you create the chart object to display in this div. Also add a ScriptManager to call your webservice method.
<form id="form1" runat="server"> <asp:ScriptManager ID="sm1" runat="server"> <Services> <asp:ServiceReference Path="~/[your_package]/GoogleChart.asmx" /> </Services> </asp:ScriptManager> </form> <div id="pie_chart"> </div>
Here is the Javascript code which you require to load data through the webservice call, create, and show chart in the div.
<script type="text/javascript"> //load the corechart package, the pie chart is in this package google.load('visualization', '1', { packages: ['corechart'] }); //provide the method name which you want to call as onload callback google.setOnLoadCallback(loadFoodLikingChart); function loadFoodLikingChart() { [your_package].GoogleChart.GetFoodLikingCountData( function (ws_rsp) { var foodLikingData= new google.visualization.DataTable(); foodLikingData.addColumn('string', 'Food'); foodLikingData.addColumn('number', 'Count'); foodLikingData.addRows(4); foodLikingData.setValue(0, 0, "Pizza"); foodLikingData.setValue(0, 1, ws_rsp.PizzaCount ); foodLikingData.setValue(1, 0, "Burger"); foodLikingData.setValue(1, 1, ws_rsp.BurgerCount ); foodLikingData.setValue(2, 0, "Hotdog"); foodLikingData.setValue(2, 1, ws_rsp.HotdogCount ); foodLikingData.setValue(3, 0, "Fried Chicken"); foodLikingData.setValue(3, 1, ws_rsp.FriedChickenCount ); var options = {}; options ['width'] = '400'; options ['height'] = '250'; options ['chartArea'] = { left: 20, top: 20, width: '95%', height: '90%' }; // Look the div id is used here to create the chart object var chart = new google.visualization.PieChart(document.getElementById('pie_chart')); chart.draw(foodLikingData,options); }, function (e) { alert("Error"); } ); } </script>
The result will be like this.
Visualize the DataTable as a two dimensional array. It will help you to understand the above code. Here is the Google Chart Gallery. You will get a lot of example there.
1 comments:
Thanks for the post. I spent a while trying to find a simple solution for c# with google charts. I'm a beginner and this really helped me out. thank!
Post a Comment