If you haven't already installed ASP.NET MVC 3 use this resource: http://www.asp.net/mvc/mvc3
For this tutorial you're also going to need the Entity Framework: http://www.microsoft.com/download/en/details.aspx?id=18504
For our purpose we will use the Northwind database which you can download from here. So let's begin!
Create new ASP.NET MVC 3 project and choose the "Empty project" option for template. For "View engine" select "Razor".
using System;using System.Collections.Generic;using System.Data;using System.Data.Entity;using System.Linq;using System.Web;using System.Web.Mvc;using Project.Models;namespace Project.Controllers{public class OrdersController : Controller{private NORTHWNDEntities2 db = new NORTHWNDEntities2();//// GET: /Orders/public ViewResult Index(){var orders = db.Orders.Include(o => o.Customer).Include(o => o.Employee).Include(o => o.Shipper);return View(orders.ToList());}public JsonResult GetOrders(string sortdatafield, string sortorder, int pagesize, int pagenum){var query = Request.QueryString;var dbResult = db.Database.SqlQuery<Order>(this.BuildQuery(query));var orders = from order in dbResultselect new Order{ShippedDate = order.ShippedDate,ShipName = order.ShipName,ShipAddress = order.ShipAddress,ShipCity = order.ShipCity,ShipCountry = order.ShipCountry};var total = dbResult.Count();orders = orders.Skip(pagesize * pagenum).Take(pagesize);if (sortorder != null && sortorder != ""){if (sortorder == "asc"){orders = orders.OrderBy(o => o.GetType().GetProperty(sortdatafield).GetValue(o, null));}else{orders = orders.OrderByDescending(o => o.GetType().GetProperty(sortdatafield).GetValue(o, null));}}var result = new{TotalRows = total,Rows = orders};return Json(result, JsonRequestBehavior.AllowGet);}private string BuildQuery(System.Collections.Specialized.NameValueCollection query){var filtersCount = int.Parse(query.GetValues("filterscount")[0]);var queryString = @"SELECT * FROM Orders ";var tmpDataField = "";var tmpFilterOperator = "";var where = "";if (filtersCount > 0){where = " WHERE (";}for (var i = 0; i < filtersCount; i += 1){var filterValue = query.GetValues("filtervalue" + i)[0];var filterCondition = query.GetValues("filtercondition" + i)[0];var filterDataField = query.GetValues("filterdatafield" + i)[0];var filterOperator = query.GetValues("filteroperator" + i)[0];if (tmpDataField == ""){tmpDataField = filterDataField;}else if (tmpDataField != filterDataField){where += ") AND (";}else if (tmpDataField == filterDataField){if (tmpFilterOperator == ""){where += " AND ";}else{where += " OR ";}}// build the "WHERE" clause depending on the filter's condition, value and datafield.where += this.GetFilterCondition(filterCondition, filterDataField, filterValue);if (i == filtersCount - 1){where += ")";}tmpFilterOperator = filterOperator;tmpDataField = filterDataField;}queryString += where;return queryString;}private string GetFilterCondition(string filterCondition, string filterDataField, string filterValue){switch (filterCondition){case "NOT_EMPTY":case "NOT_NULL":return " " + filterDataField + " NOT LIKE '" + "" + "'";case "EMPTY":case "NULL":return " " + filterDataField + " LIKE '" + "" + "'";case "CONTAINS_CASE_SENSITIVE":return " " + filterDataField + " LIKE '%" + filterValue + "%'" + " COLLATE SQL_Latin1_General_CP1_CS_AS";case "CONTAINS":return " " + filterDataField + " LIKE '%" + filterValue + "%'";case "DOES_NOT_CONTAIN_CASE_SENSITIVE":return " " + filterDataField + " NOT LIKE '%" + filterValue + "%'" + " COLLATE SQL_Latin1_General_CP1_CS_AS"; ;case "DOES_NOT_CONTAIN":return " " + filterDataField + " NOT LIKE '%" + filterValue + "%'";case "EQUAL_CASE_SENSITIVE":return " " + filterDataField + " = '" + filterValue + "'" + " COLLATE SQL_Latin1_General_CP1_CS_AS"; ;case "EQUAL":return " " + filterDataField + " = '" + filterValue + "'";case "NOT_EQUAL_CASE_SENSITIVE":return " BINARY " + filterDataField + " <> '" + filterValue + "'";case "NOT_EQUAL":return " " + filterDataField + " <> '" + filterValue + "'";case "GREATER_THAN":return " " + filterDataField + " > '" + filterValue + "'";case "LESS_THAN":return " " + filterDataField + " < '" + filterValue + "'";case "GREATER_THAN_OR_EQUAL":return " " + filterDataField + " >= '" + filterValue + "'";case "LESS_THAN_OR_EQUAL":return " " + filterDataField + " <= '" + filterValue + "'";case "STARTS_WITH_CASE_SENSITIVE":return " " + filterDataField + " LIKE '" + filterValue + "%'" + " COLLATE SQL_Latin1_General_CP1_CS_AS"; ;case "STARTS_WITH":return " " + filterDataField + " LIKE '" + filterValue + "%'";case "ENDS_WITH_CASE_SENSITIVE":return " " + filterDataField + " LIKE '%" + filterValue + "'" + " COLLATE SQL_Latin1_General_CP1_CS_AS"; ;case "ENDS_WITH":return " " + filterDataField + " LIKE '%" + filterValue + "'";}return "";}//// GET: /Orders/Details/5public ViewResult Details(int id){Order order = db.Orders.Find(id);return View(order);}//// GET: /Orders/Createpublic ActionResult Create(){ViewBag.CustomerID = new SelectList(db.Customers, "CustomerID", "CompanyName");ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "LastName");ViewBag.ShipVia = new SelectList(db.Shippers, "ShipperID", "CompanyName");return View();}//// POST: /Orders/Create[HttpPost]public ActionResult Create(Order order){if (ModelState.IsValid){db.Orders.Add(order);db.SaveChanges();return RedirectToAction("Index");}ViewBag.CustomerID = new SelectList(db.Customers, "CustomerID", "CompanyName", order.CustomerID);ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "LastName", order.EmployeeID);ViewBag.ShipVia = new SelectList(db.Shippers, "ShipperID", "CompanyName", order.ShipVia);return View(order);}//// GET: /Orders/Edit/5public ActionResult Edit(int id){Order order = db.Orders.Find(id);ViewBag.CustomerID = new SelectList(db.Customers, "CustomerID", "CompanyName", order.CustomerID);ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "LastName", order.EmployeeID);ViewBag.ShipVia = new SelectList(db.Shippers, "ShipperID", "CompanyName", order.ShipVia);return View(order);}//// POST: /Orders/Edit/5[HttpPost]public ActionResult Edit(Order order){if (ModelState.IsValid){db.Entry(order).State = EntityState.Modified;db.SaveChanges();return RedirectToAction("Index");}ViewBag.CustomerID = new SelectList(db.Customers, "CustomerID", "CompanyName", order.CustomerID);ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "LastName", order.EmployeeID);ViewBag.ShipVia = new SelectList(db.Shippers, "ShipperID", "CompanyName", order.ShipVia);return View(order);}//// GET: /Orders/Delete/5public ActionResult Delete(int id){Order order = db.Orders.Find(id);return View(order);}//// POST: /Orders/Delete/5[HttpPost, ActionName("Delete")]public ActionResult DeleteConfirmed(int id){Order order = db.Orders.Find(id);db.Orders.Remove(order);db.SaveChanges();return RedirectToAction("Index");}protected override void Dispose(bool disposing){db.Dispose();base.Dispose(disposing);}}}
<script type="text/javascript">$(document).ready(function () {// prepare the datavar source = {datatype: "json",datafields: [{ name: 'ShippedDate', type: 'date' },{ name: 'ShipName' },{ name: 'ShipAddress' },{ name: 'ShipCity' },{ name: 'ShipCountry' }],url: 'Orders/GetOrders',// update the grid and send a request to the server.filter: function () {$("#jqxgrid").jqxGrid('updatebounddata', 'filter');},// update the grid and send a request to the server.sort: function () {$("#jqxgrid").jqxGrid('updatebounddata', 'sort');},root: 'Rows',beforeprocessing: function (data) {source.totalrecords = data.TotalRows;}};var dataadapter = new $.jqx.dataAdapter(source, {loadError: function (xhr, status, error) {alert(error);}});// initialize jqxGrid$("#jqxgrid").jqxGrid({source: dataadapter,filterable: true,sortable: true,autoheight: true,pageable: true,virtualmode: true,rendergridrows: function (obj) {return obj.data;},columns: [{ text: 'Shipped Date', datafield: 'ShippedDate', cellsformat: 'yyyy-MM-dd', width: 200 },{ text: 'Ship Name', datafield: 'ShipName', width: 200 },{ text: 'Address', datafield: 'ShipAddress', width: 180 },{ text: 'City', datafield: 'ShipCity', width: 100 },{ text: 'Country', datafield: 'ShipCountry', width: 140 }]});});</script><h2>Index</h2><div id="jqxgrid"></div>
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.Web.Routing;namespace Project{// Note: For instructions on enabling IIS6 or IIS7 classic mode,// visit http://go.microsoft.com/?LinkId=9394801public class MvcApplication : System.Web.HttpApplication{public static void RegisterGlobalFilters(GlobalFilterCollection filters){filters.Add(new HandleErrorAttribute());}public static void RegisterRoutes(RouteCollection routes){routes.IgnoreRoute("{resource}.axd/{*pathInfo}");routes.MapRoute("Orders", // Route name"{controller}/{action}/{id}", // URL with parametersnew { controller = "Orders", action = "Index", id = UrlParameter.Optional } // Parameter defaults);}protected void Application_Start(){AreaRegistration.RegisterAllAreas();RegisterGlobalFilters(GlobalFilters.Filters);RegisterRoutes(RouteTable.Routes);}}}