When ever we need to create a grid in MVC 3, we often end up with Telerik grids, due to awesome features and support. But you need to have a licensed version of controls.
What if you don't have license for it and you have to create a Gridview of your own, like below.
Its very simple, and all you need to create is a little Html, JQuery and supporting Action Methods.
Lets see how . . .
Step 1: Create a MVC 3 Project. Create a Model class for above data.
HomeController.cs:
Step 3: Create the View representing the Grid in a very creative manner. While creating the different fields of the grid, ensure the Ids are unique and relative to one component of model.
Here i consider EmpId to be the Key Fields of reference for all the rows.
See how i created the grid taking care of above functionality.
Results:
What if you don't have license for it and you have to create a Gridview of your own, like below.
Its very simple, and all you need to create is a little Html, JQuery and supporting Action Methods.
Lets see how . . .
Step 1: Create a MVC 3 Project. Create a Model class for above data.
namespace MVC3SimpleGrid.Models { public class EmployeeModel { public int EmpId { get; set; } public string EmployeeName { get; set; } public string EmployeeDep { get; set; } } }Step 2: Create the Action method and the supporting functionality.
HomeController.cs:
namespace MVC3SimpleGrid.Controllers { public class HomeController : Controller { static List<EmployeeModel> _lstEmployee = new List<EmployeeModel>(); public ActionResult Index() { _lstEmployee=GetEmployees(); return View(_lstEmployee); } private List<EmployeeModel> GetEmployees() { List<EmployeeModel> _pvtList=new List<EmployeeModel>(); EmployeeModel mod1 = new EmployeeModel { EmpId = 1, EmployeeName = "Employee1", EmployeeDep = "EmployeeDep1" }; EmployeeModel mod2 = new EmployeeModel { EmpId = 2, EmployeeName = "Employee2", EmployeeDep = "EmployeeDep2" }; EmployeeModel mod3 = new EmployeeModel { EmpId = 3, EmployeeName = "Employee3", EmployeeDep = "EmployeeDep3" }; EmployeeModel mod4 = new EmployeeModel { EmpId = 4, EmployeeName = "Employee4", EmployeeDep = "EmployeeDep4" }; _pvtList.Add(mod1); _pvtList.Add(mod2); _pvtList.Add(mod3); _pvtList.Add(mod4); return _pvtList; } } }You can observe that Default Action method is creating a list of employees and send it back to view.
Step 3: Create the View representing the Grid in a very creative manner. While creating the different fields of the grid, ensure the Ids are unique and relative to one component of model.
Here i consider EmpId to be the Key Fields of reference for all the rows.
See how i created the grid taking care of above functionality.
@model IEnumerable<MVC3SimpleGrid.Models.EmployeeModel> @{ ViewBag.Title = "Index"; } <div id="divResult"> <h2>Simple MVC Grid with Row Level Edit & Save</h2> <table> <tr> <th>Employee ID</th> <th>Employee Name</th> <th>Employee Department</th> <th>Action</th> </tr> @foreach (var m in Model) { <tr> <td> @m.EmpId </td> <td> <div id="divEmpName-@m.EmpId.ToString()" class="visible">@m.EmployeeName</div> <input id="txtEmpName-@m.EmpId.ToString()" type="text" class="hide" value=@m.EmployeeName.ToString() /> </td> <td> <div id="divEmpDep-@m.EmpId.ToString()" class="visible">@m.EmployeeDep</div> <input id="txtEmpDep-@m.EmpId.ToString()" type="text" class="hide" value=@m.EmployeeDep.ToString() /> </td> <td> <button id="btnEdit-@m.EmpId.ToString()" class="visible" onclick="ShowEdit(@m.EmpId); return false;">Edit</button> <button id="btnSave-@m.EmpId.ToString()" class="hide" onclick="SaveEdit(@m.EmpId); return false;">Save</button> </td> </tr> } </table> </div>Immediately run the view in browser and see how the Ids are generated.
<div id="divResult"> <h2>Simple MVC Grid with Row Level Edit & Save</h2> <table> <tr> <th>Employee ID</th> <th>Employee Name</th> <th>Employee Department</th> <th>Action</th> </tr> <tr> <td> 1 </td> <td> <div id="divEmpName-1" class="visible">Employee1</div> <input id="txtEmpName-1" type="text" class="hide" value=Employee1 /> </td> <td> <div id="divEmpDep-1" class="visible">EmployeeDep1</div> <input id="txtEmpDep-1" type="text" class="hide" value=EmployeeDep1 /> </td> <td> <button id="btnEdit-1" class="visible" onclick="ShowEdit(1); return false;">Edit</button> <button id="btnSave-1" class="hide" onclick="SaveEdit(1); return false;">Save</button> </td> </tr> . . . AND SO ON . . .Step 4: Here comes the JQuery part. We need to create the script to address the functions attached to both the buttons to do their respective tasks.
<script type="text/javascript"> function ShowEdit(par) { $("#divEmpName-" + par).attr("class", "hide"); $("#txtEmpName-" + par).attr("class", "visible"); $("#divEmpDep-" + par).attr("class", "hide"); $("#txtEmpDep-" + par).attr("class", "visible"); $("#btnEdit-" + par).attr("class", "hide"); $("#btnSave-" + par).attr("class", "visible"); } function SaveEdit(par) { $("#divEmpName-" + par).attr("class", "visible"); $("#txtEmpName-" + par).attr("class", "hide"); $("#divEmpDep-" + par).attr("class", "visible"); $("#txtEmpDep-" + par).attr("class", "hide"); $("#btnEdit-" + par).attr("class", "visible"); $("#btnSave-" + par).attr("class", "hide"); var _empName = $("#txtEmpName-" + par).val(); var _empDep = $("#txtEmpDep-" + par).val(); var url = '@Url.Action("Index","Home")'; $.post(url, { Id: par, empName: _empName, empDep: _empDep }, function (data) { $("#divResult").html(data); }); } </script>Step 5: Everything is there except the Ajax version of Index Action method for supporting the SaveEdit(). Below is the implementation of it.
[HttpPost] public ActionResult Index(int Id,string empName,string empDep) { _lstEmployee[Id - 1].EmployeeName = empName; _lstEmployee[Id - 1].EmployeeDep = empDep; return View(_lstEmployee); }We are all set with coding part. Now execute and see the results.
Results:
No comments:
Post a Comment