Introduction
In this post, I explain how to Group data in Gridview using MVC. Sometimes we need to show group data in our MVC Application like show List of State group by Country. Here I have done this using MVC 4. Steps are given below:-For ASP.Net Developer visit: Grouping Gridview in C#.Net.
Prerequisite
I used followings:- .Net framework 4.0
- Entity Framework
- SQL Server 2008
Steps :
Just follow the steps and get result easily.Step - 1 : Create New Project
Go to File > New > Project > Select asp.net mvc4 web application > Entry Application Name > Click OK.Step-2: Add a Database.
Go to Solution Explorer > Right Click on App_Data folder > Add > New item > Select SQL Server Database Under Data > Enter Database name > Add.Step-3: Create two tables and insert data for show grouped data in Gridview
Open Database > Right Click on Table > Add New Table > Add Columns > Save > Enter table name > Ok.In this example, I have created two table 1. CountryMaster 2. StateMaster.
Create the table and insert data for Show in grouped gridview.
Step-4: Add Entity Data Model.
Go to Solution Explorer > Right Click on Project name form Solution Explorer > Add > New item > Select ADO.net Entity Data Model under data > Enter model name > Add.A popup window will come (Entity Data Model Wizard) > Select Generate from database > Next >
Chose your data connection > select your database > next > Select tables > enter Model Namespace > Finish.
Step-5: Creare a ModelView
Here in this example, I need a ViewModel for getting data as a single entity.Add a Folder(ViewModel) into your project root directory. > Right Click on the folder > Add > Class > Enter Class name > Add.
Write the following code to your class.
- public class CountryState
- {
- public int CountryID { get; set; }
- public string CountryName { get; set; }
- public int StateID { get; set; }
- public string StateName { get; set; }
- }
STEP-6: Add Action For Populate Data.
Go To Controller > Add your action > write the following the code and Rebuild your application.
- public ActionResult Gridview()
- {
- List<CountryState> StateList = new List<CountryState>();
- using (CountryStateEntities dc = new CountryStateEntities())
- {
- var v = (from a in dc.CountryMasters
- join b in dc.StateMasters on a.CountryID equals b.CountryID
- select new
- {
- a.CountryID,
- a.CountryName,
- b.StateID,
- b.StateName
- });
- foreach (var i in v)
- {
- StateList.Add(new CountryState
- {
- CountryID = i.CountryID,
- CountryName = i.CountryName,
- StateID = i.StateID,
- StateName = i.StateName
- });
- }
- }
- return View(StateList);
- }
Step-7: Add View for show data on a page.
Right Click on your Action > Add View > Enter View name > Check Create a strongly-type view > Select your model class > Select Scaffold templete > Select list > Add.Modify Your View as follow
- @model IEnumerable<MVCGridviewGrouping.ViewModel.CountryState>
- @{
- ViewBag.Title = "Gridview";
- }
- <h2>Gridview Grouping</h2>
- <div id="accordion">
- @{
- foreach (var item in Model.Select(a => a.CountryName).Distinct())
- {
- <h3>Country : @item</h3>
- <div>
- <table cellspacing="10">
- <tr>
- <th>
- State ID
- </th>
- <th>
- State Name
- </th>
- <th></th>
- </tr>
- @foreach (var i in Model.Where(a=>a.CountryName.Equals(@item)))
- {
- <tr>
- <td>
- @Html.DisplayFor(modelItem => i.StateID)
- </td>
- <td>
- @Html.DisplayFor(modelItem => i.StateName)
- </td>
- <td>
- @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
- @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
- @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
- </td>
- </tr>
- }
- </table>
- </div>
- }
- }
- </div>
- <script language="javascript">
- $(function () {
- $("#accordion").accordion({
- heightStyle: "content"
- });
- });
- </script>
Step-8: Modify your _Layout.cshtml view
Add some 2 js and 1 CSS file to _Layout.cshtml viewRemove Line
- <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" type="text/javascript" />
- <script src="http://code.jquery.com/jquery-1.9.1.js" type="text/javascript"></script>
- <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js" type="text/javascript"></script>
@Scripts.Render("~/bundles/jquery")
Complete Code Here _Layout.cshtml view
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8" />
- <title>@ViewBag.Title - My ASP.NET MVC Application</title>
- <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
- <meta name="viewport" content="width=device-width" />
- @Styles.Render("~/Content/css")
- @Scripts.Render("~/bundles/modernizr")
- <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" type="text/javascript" />
- <script src="http://code.jquery.com/jquery-1.9.1.js" type="text/javascript"></script>
- <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js" type="text/javascript"></script>
- </head>
- <body>
- <header>
- <div class="content-wrapper">
- <div class="float-left">
- <p class="site-title">@Html.ActionLink("your logo here", "Index", "Home")</p>
- </div>
- <div class="float-right">
- <section id="login">
- @Html.Partial("_LoginPartial")
- </section>
- <nav>
- <ul id="menu">
- <li>@Html.ActionLink("Home", "Index", "Home")</li>
- <li>@Html.ActionLink("About", "About", "Home")</li>
- <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
- <li>@Html.ActionLink("Gridview Grouping","GridView","Home")</li>
- </ul>
- </nav>
- </div>
- </div>
- </header>
- <div id="body">
- @RenderSection("featured", required: false)
- <section class="content-wrapper main-content clear-fix">
- @RenderBody()
- </section>
- </div>
- <footer>
- <div class="content-wrapper">
- <div class="float-left">
- <p>© @DateTime.Now.Year - My ASP.NET MVC Application</p>
- </div>
- </div>
- </footer>
- @RenderSection("scripts", required: false)
- </body>
- </html>