Creating
Highcharts in MVC
Steps for Create Highchart
1. Download
highcharts
from Here Or install via Nuget Package
manager
2.
Copy
& past HighCharts folder in scripts folder
3.
Add
js files to your layout page
Your Layout page should Look Like
this
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - My
Application</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
<script src="~/Scripts/Highcharts/highcharts.js"></script>
<script src="~/Scripts/Highcharts/themes/grid-light.js"></script>
</head>
<body>
@Html.Action("TopNav","Navigation") @*Navbar rendering*@
<div class="container
body-content">
@RenderBody()
<hr />
<footer>
<p>© @DateTime.Now.Year - My Application</p>
</footer>
</div>
@RenderSection("scripts", required: false)
</body>
</html>
1. Add class to model folder (GraphModal)
GrphModal class should look like
this.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ExportToExcel.Models
{
public class GraphModal
{
public string Course { get; set; }
public int Students { get; set; }
}
}
2. Run the following script in your
target database for creating tables and adding records
CREATE TABLE
[dbo].[Course](
[CourseID] [int] NOT NULL,
[CourseName]
[varchar](200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
CONSTRAINT [PK_Course] PRIMARY
KEY CLUSTERED
(
[CourseID] ASC
)WITH (IGNORE_DUP_KEY
= OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Student](
[StudentID] [int] NOT NULL,
[Name] [varchar](200) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL,
[RegNo] [varchar](50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL,
[Address] [varchar](50) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL,
[CourseID] [int] NULL,
CONSTRAINT
[PK_Student] PRIMARY KEY
CLUSTERED
(
[StudentID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Student] WITH CHECK ADD CONSTRAINT
[FK_Student_Course] FOREIGN KEY([CourseID])
REFERENCES [dbo].[Course] ([CourseID])
GO
INSERT INTO dbo.Course VALUES (1,'C#')
INSERT INTO dbo.Course VALUES (2,'C++')
INSERT INTO dbo.Course VALUES (3,'Asp.net')
INSERT INTO [Student] VALUES(1,'abc','reg 1','Address 1',1)
INSERT INTO [Student] VALUES(2,'xyz','reg 2','Address 2',1)
INSERT INTO [Student] VALUES(3,'bnm','reg 3','Address 3',1)
INSERT INTO [Student] VALUES(4,'abc','reg 4','Address 1',1)
INSERT INTO [Student] VALUES(5,'xyz','reg 5','Address 2',1)
INSERT INTO [Student] VALUES(6,'bnm','reg 6','Address 3',1)
INSERT INTO [Student] VALUES(7,'st 1','reg 1','Address 1',2)
INSERT INTO [Student] VALUES(8,'st2','reg 2','Address 2',2)
INSERT INTO [Student] VALUES(9,'st3','reg 3','Address 3',2)
INSERT INTO [Student] VALUES(10,'st4','reg 4','Address 1',2)
INSERT INTO [Student] VALUES(11,'st5','reg 5','Address 2',2)
INSERT INTO [Student] VALUES(12,'st6','reg 6','Address 3',2)
INSERT INTO [Student] VALUES(13,'st7','reg 5','Address 2',2)
INSERT INTO [Student] VALUES(14,'st8','reg 6','Address 3',2)
INSERT INTO [Student] VALUES(15,'st 1','reg 1','Address 1',3)
INSERT INTO [Student] VALUES(16,'st2','reg 3','Address 3',3)
INSERT INTO [Student] VALUES(17,'st3','reg 3','Address 3',3)
INSERT INTO [Student] VALUES(18,'st4','reg 4','Address 1',3)
INSERT INTO [Student] VALUES(19,'st5','reg 5','Address 3',3)
INSERT INTO [Student] VALUES(20,'st6','reg 6','Address 3',3)
INSERT INTO [Student] VALUES(21,'st7','reg 5','Address 3',3)
INSERT INTO [Student] VALUES(22,'st8','reg 6','Address 3',3)
INSERT INTO [Student] VALUES(23,'st8','reg 6','Address 3',3)
INSERT INTO [Student] VALUES(24,'st8','reg 6','Address 3',3)
3.
Add
controller(ChartsController)
to
your project. Should look like this
using System;
using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Data.SqlClient; using System.Data; using ExportToExcel.Models; namespace ExportToExcel.Controllers { public class ChartsController : Controller { // GET: Charts public ActionResult ShowGraph() { return View(); } [HttpPost] public JsonResult GenerateGraph() { SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=Accounting; Integrated Security=SSPI;"); SqlDataAdapter da = new SqlDataAdapter(@"SELECT Course.CourseName AS Course, COUNT(Student.StudentID) AS Students FROM Student INNER JOIN Course ON Student.CourseID = Course.CourseID GROUP BY Course.CourseName", con); DataTable dt = new DataTable(); da.Fill(dt); List<GraphModal> lst = new List<GraphModal>(); foreach(DataRow row in dt.Rows) { lst.Add(new GraphModal() { Course=row["Course"].ToString(), Students=int.Parse(row["Students"].ToString()) }); } return Json(lst, JsonRequestBehavior.AllowGet); } } }
1.
Add
view to ShowGraph() action Method. Should look like this.
@{
ViewBag.Title = "ShowGraph";
Layout = "~/Views/Shared/_MyLayout.cshtml";
}
<script language="javascript">
var course = [];
var students = [];
$(function () {
$.fn.extend({
StudentsByCourse: function () {
$.ajax({
type: "POST",
url: "GenerateGraph",
data: '{}',
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data) {
course = []; students = [];
$.each(data, function (i, x) {
course.push(x.Course);
students.push(x.Students);
});
},
failure: function (response) {
alert(response.d);
}
});
$('#studentbycourse').highcharts({
chart: {
type: 'column', width: 830
},
title: {
text: 'Students By Course'
},
xAxis: {
categories: course,
crosshair: true
},
yAxis: {
min: 0,
title: {
text: 'Students'
}
},
tooltip: {
headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
'<td style="padding:0"><b>{point.y:.0f}</b></td></tr>',
footerFormat: '</table>',
shared: true,
useHTML: true
},
plotOptions: {
column: {
pointPadding: 0.2,
borderWidth: 0,
dataLabels: {
enabled: true,
rotation: 40,
softConnector: true,
y: -8
}
}
},
series: [{
showInLegend: false,
name: 'Students',
data: students
}]
});
$("text:contains('Highcharts.com')").css('display', 'none');
}
});
});
//$("text:contains('Highcharts.com')").css('display', 'none');
$(function () {
$.fn.StudentsByCourse();
});
</script>
<h2>Show Graph</h2><div class="panel panel-primary"><div class="panel-heading">Students Graph</div><div class="panel-body"><div id="studentbycourse"></div></div></div>
Now
run your project and navigate to charts/showgraph


1 Comments
Hi Zafar
ReplyDeleteSorry bro but it shows highcharts is not a function error rest seems fine.
Can you send me the js that you are using in the code.
Post a Comment