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() { var query = Request.QueryString; var dbResult = db.Database.SqlQuery<Order>(this.BuildQuery(query)); var orders = from order in dbResult select new Order { ShippedDate = order.ShippedDate, ShipName = order.ShipName, ShipAddress = order.ShipAddress, ShipCity = order.ShipCity, ShipCountry = order.ShipCountry }; return Json(orders, 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/5 public ViewResult Details(int id) { Order order = db.Orders.Find(id); return View(order); } // // GET: /Orders/Create public 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/5 public 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/5 public 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 data var source = { datatype: "json", datafields: [ { name: 'ShippedDate', type: 'date' }, { name: 'ShipName' }, { name: 'ShipAddress' }, { name: 'ShipCity' }, { name: 'ShipCountry' } ], url: 'Orders/GetOrders', filter: function () { // update the grid and send a request to the server. $("#jqxgrid").jqxGrid('updatebounddata', 'filter'); } }; var dataAdapter = new $.jqx.dataAdapter(source); // initialize jqxGrid $("#jqxgrid").jqxGrid( { source: dataAdapter, filterable: true, showfilterrow: true, columns: [ { text: 'Shipped Date', datafield: 'ShippedDate', cellsformat: 'd', 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>
public static void RegisterRoutes(RouteCollection routes){ routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Orders", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Orders", action = "Index", id = UrlParameter.Optional } // Parameter defaults );}