
Introduction
In this article, we will see in detail about how to create a Dynamic MVC dashboard with the chart and data display, using AngularJS and WEB API. Using this Web Application, you can write your own SQL query to bind the dynamic dashboard with the chart and data. This program makes your work easy in displaying any table/columns details with your entered where condition, order by, and group by options for the selected database on your home page with both the data and chart.

In our previous article,
In this demo Application, we have drawn a pie chart in our MVC dashboard page. You can draw any chart as per your requirement. In our previous article, we have explained about how to draw a chart such as Line, Pie, Bar, Donut, Bubble and Line and Bar Chart in MVC Application .
Features in Shanu MVC Dashboard

- Dynamic SQL Query
- Column Names
- Table Names
- Where Condition
- Group By
- Order By
- Chart SQL Query
- Chart Setting and Draw Chart
Here, we will see the details of each part.
Kindly refer to our previous article MVC Dashboard Using AngularJS And Web API for the sections from 1 to 6. We have explained in detail about each section with the animated images.
This article has all the same features with the additional chart feature, to be displayed on our MVC dashboard. - Chart SQL Query: To display the chart first, we need to write our Select query to display both the chart item and the value.

Here, the sample query is used to display the chart in our MVC dashboard page. Here, for chart binding; the user can enter the complete Select query to bind the result in the Combo box.
Sample Select query to be used for our Application is given below:To draw a chart, we have fixed the standard -- as always display two columns, where one is the name and another one is the value. Here, the name is any name (Legend) to be displayed for a chart and a value is the actual value to draw the chart. In search button click, we first bind the chart item to the Combo box. We will be using this Combo box result to draw the chart.- Select ItemName as Name,SUM(Price) as Value FROM ItemDetail GROUP BY ItemName ORDER BY Value,Name
- Chart Setting and Draw Chart
A user can add Chart Title and Watermark text, as per his requirement at the run time and click “Click to Draw Chart) button to draw your chart on the dashboard.

You can display any chart data from any table from the given database. All you need to do is, write the Select query for the chart with the name and value column.
Prerequisites
Visual Studio 2015: You can download it from here.
Step 1:
Create a sample database and table to test this Application. Here is a SQL Script to create the database and the table with Insert query. Kindly run the code, given below, in your SQL Server to create DB and the tables.
- USE MASTER
- GO
- --1) Check for the Database Exists .If the database is exist then drop and create new DB
- IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'DashboardDB' )
- DROP DATABASE DashboardDB
- GO
- CREATE DATABASE DashboardDB
- GO
- USE DashboardDB
- GO
- -- 1) //////////// ItemDetails table
- -- Create Table ItemDetails,This table will be used to store the details like Item Information
- IF EXISTS ( SELECT [name] FROM sys.tables WHERE [name] = 'ItemDetail' )
- DROP TABLE ItemDetail
- GO
- CREATE TABLE [dbo].[ItemDetail](
- [ID] [int] IDENTITY(1,1) NOT NULL,
- [ItemNo] [varchar](100) NOT NULL ,
- [ItemName] [varchar](100) NOT NULL,
- [Comments] [varchar](100) NOT NULL,
- [Price] INT NOT NULL,
- PRIMARY KEY CLUSTERED
- (
- [ID] ASC
- )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
- ) ON [PRIMARY]
- GO
- Insert into ItemDetail(ItemNo,ItemName,Comments,Price) values
- ('101','NoteBook', 'HP Notebook 15 Inch', 24500)
- Insert into ItemDetail(ItemNo,ItemName,Comments,Price) values
- ('102','MONITOR', 'SAMSNG', '8500')
- Insert into ItemDetail(ItemNo,ItemName,Comments,Price) values
- ('103','MOBILE', 'SAMSUNG NOTE 5', 42500)
- Insert into ItemDetail(ItemNo,ItemName,Comments,Price) values
- ('104','MOBILE', 'SAMSUNG S7 Edge', 56000)
- Insert into ItemDetail(ItemNo,ItemName,Comments,Price) values
- ('105','MOUSE', 'ABKO', 780)
- Insert into ItemDetail(ItemNo,ItemName,Comments,Price) values
- ('106','HDD' ,'LG', 3780)
- select * from ItemDetail
- select ItemName,SUM(convert(int,Price)) as totalCost
- from ItemDetail
- GROUP BY ItemName
- -- 2) User table
- IF EXISTS ( SELECT [name] FROM sys.tables WHERE [name] = 'UserDetails' )
- DROP TABLE UserDetails
- GO
- CREATE TABLE [dbo].UserDetails(
- [UserID] [int] IDENTITY(1,1) NOT NULL,
- [UserName] [varchar](100) NOT NULL,
- [UserType] [varchar](100) NOT NULL,
- [Phone] [varchar](20) NOT NULL,
- PRIMARY KEY CLUSTERED
- (
- [UserID] ASC
- )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
- ) ON [PRIMARY]
- Insert into UserDetails(UserName,UserType,Phone) values
- ('SHANU','Admin','01039124503')
- Insert into UserDetails(UserName,UserType,Phone) values
- ('Afraz','user','01039120984')
- Insert into UserDetails(UserName,UserType,Phone) values
- ('Afreen','user','01039120005')
- Insert into UserDetails(UserName,UserType,Phone) values
- ('Raj','Admin','01039120006')
- Insert into UserDetails(UserName,UserType,Phone) values
- ('Mak','Manager','01039124567')
- Insert into UserDetails(UserName,UserType,Phone) values
- ('Jack','Manager','01039120238')
- Insert into UserDetails(UserName,UserType,Phone) values
- ('Pak','User','01039125409')
- Insert into UserDetails(UserName,UserType,Phone) values
- ('Ninu','Accountant','01039126810')
- Insert into UserDetails(UserName,UserType,Phone) values
- ('Nanu','Accountant','01039152011')
- -- select * from Userdetails
- -- 3 UserAddress
- IF EXISTS ( SELECT [name] FROM sys.tables WHERE [name] = 'UserAddress' )
- DROP TABLE UserAddress
- GO
- CREATE TABLE [dbo].UserAddress(
- [UserAddID] [int] IDENTITY(1,1) NOT NULL,
- [UserID] [int] ,
- [Address] [varchar](200) NOT NULL,
- [Email] [varchar](100) NOT NULL,
- PRIMARY KEY CLUSTERED
- (
- [UserAddID] ASC
- )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
- ) ON [PRIMARY]
- Insert into UserAddress(UserID,Address,Email) values
- (1,'Madurai,Tamil Nadu, India','[email protected]')
- Insert into UserAddress(UserID,Address,Email) values
- (2,'Madurai,Tamil Nadu, India','[email protected]')
- Insert into UserAddress(UserID,Address,Email) values
- (3,'Seoul,South Korea','[email protected]')
- select * from UserAddress
- select A.UserName,A.UserType,A.Phone,B.Address,B.Email
- From
- Userdetails A Left Outer JOIN UserAddress B
- on
- A.UserID=B.UserID
This is our main stored procedure used to run all our dynamic SQL Select queries and return the result to bind in our MVC page.
- USE [DashboardDB]
- GO
- /****** Object: StoredProcedure [dbo].[USP_Dashboard_Select] ******/
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- -- 1) select top 10 random kidsLearnerMaster records
- -- Author : Shanu
- -- Create date : 2016-05-14
- -- Description :To run dymanic Query
- -- Tables used : Dynamic Table
- -- Modifier : Shanu
- -- Modify date : 2016-05-14
- -- =============================================
- -- To Select all user roles
- -- EXEC USP_Dashboard_Select @columnName = 'UserName,UserType,Phone' ,@TableNames = 'UserDetails' ,@isCondition=0,@ConditionList='UserType=''ADMIN'' ',@isGroupBY =1,@GroupBYList = 'UserName,UserType,Phone', @isOrderBY =1,@OrderBYList = ' UserType '
- -- EXEC USP_Dashboard_Select @columnName = 'ItemName,SUM(Price) as totalCost' ,@TableNames = 'ItemDetail' ,@isCondition=0,@ConditionList='Price>''400'' ',@isGroupBY =1,@GroupBYList = 'ItemName'
- -- EXEC USP_Dashboard_Select @sqlQuery = 'Select * from ItemDetail'
- -- EXEC USP_Dashboard_Select @sqlQuery = 'select ID,ItemNo ,ItemName ,Comments ,Price from ItemDetail'
- -- =============================================
- ALTER PROCEDURE [dbo].[USP_Dashboard_Select]
- (
- @sqlQuery varchar(MAX)='',
- @columnName varchar(MAX)='',
- @TableNames varchar(MAX)='',
- @isCondition INT=0,
- @ConditionList varchar(MAX)='',
- @isGroupBY INT=0,
- @GroupBYList varchar(MAX)='',
- @isOrderBY INT=0,
- @OrderBYList varchar(MAX)=''
- )
- AS
- BEGIN
- BEGIN TRY
- IF @sqlQuery =''
- BEGIN
- SET @sqlQuery = 'SELECT ' + @columnName + ' FROM ' + @TableNames
- IF @isCondition=1
- BEGIN
- SET @sqlQuery = @sqlQuery+ ' WHERE ' + @ConditionList
- END
- IF @isGroupBY=1
- BEGIN
- SET @sqlQuery = @sqlQuery+ ' GROUP BY ' + @GroupBYList
- END
- IF @isOrderBY=1
- BEGIN
- SET @sqlQuery = @sqlQuery+ ' Order BY ' + @OrderBYList
- END
- EXEC (@sqlQuery)
- END
- ELSE
- BEGIN
- EXEC (@sqlQuery)
- END
- END TRY
- BEGIN CATCH
- SELECT ERROR_NUMBER() AS ErrorNumber
- ,ERROR_MESSAGE() AS ErrorMessage;
- END CATCH
- END
After installing our Visual Studio 2015; click Start, followed by Programs, and select Visual Studio 2015. Click Visual Studio 2015. Click New, followed by Project, select Web and then select ASP.NET Web Application. Enter your project name and click OK.

Select MVC, WEB API and click OK.

Now, we have created our MVC Application. As a next step, we add our connection string in our Web.Config file. Here, we are not using entity framework. Here, we will directly get the data from our MVC Web API controller method, using the normal ADO.NET method.
- <add name="dashboard" connectionString="Data Source=SQLSERVERNAME;Initial Catalog=DashboardDB;Persist Security Info=True;User ID=UID;Password=PWD" providerName="System.Data.SqlClient" />
Step 3: Add web API Controller
Right click Controllers folder, click Add and click Controller.

Here, we will add a WEB API Controller to be used for our AngularJS.
Select Web API 2 Controller – Empty and click Add .next, enter the controller name as DashboardAPIController

Here, use the Http GET method to get all our dynamic data from the database, using normal ADO.NET method.



roi tambalPosted Jan 23, 2021, 10:43 AM
Very nice !!
Ravi KandelPosted Jul 14, 2016, 12:09 PM
Thanks for sharing.
Saurabh SarkarPosted Jul 8, 2016, 8:22 AM
Nice
Vinodh NarayananPosted Jul 1, 2016, 1:40 AM
Good one
Humayun Kabir MamunPosted Jun 25, 2016, 5:15 AM
Great work Mr. Shanu...
Santhakumar MunuswamyPosted Jun 25, 2016, 12:49 AM
Thank you for well written. Keep it up
Prasanna MuraliPosted Jun 23, 2016, 10:19 AM
Nice one....
Saurabh SarkarPosted Jun 23, 2016, 3:46 AM
Nice article.
GokulPosted Jun 23, 2016, 3:12 AM
Thanks for sharing
Anu VPosted Jun 22, 2016, 7:24 AM
Nice sharing
Kunal PatelPosted Jun 22, 2016, 3:32 AM
Nice article sir. Always learn something new from your article.
RajaPosted Jun 22, 2016, 1:54 AM
Good One..
kalu singh raoPosted Jun 22, 2016, 1:50 AM
Nice...
Davronbek UmirovPosted Jun 22, 2016, 12:40 AM
Waiting for next article... Nice
Vignesh ManiPosted Jun 21, 2016, 4:56 PM
Nice one
Kuppurasu NagarajPosted Jun 21, 2016, 12:38 PM
Nice Sharing..
farooq smdPosted Jun 21, 2016, 11:03 AM
nice one