Javascript to set up the jqGrid:
$(document).ready(function() {
jQuery("#list").jqGrid({
url:'ContactDemo.ashx',
datatype: 'json',
mtype: 'GET',
colNames:['Id', 'City', 'State', 'ZipCode'],
colModel :[
{name:'Id', index:'Id', width:30, align:'left' },
{name:'City', index:'City', width:130, align:'left' },
{name:'State', index:'State', width:40, align:'left' },
{name:'ZipCode', index:'ZipCode', width:90, align:'left' }],
rowNum:10,
rowList:[5,10,20,50],
sortname: 'City',
sortorder: "asc",
viewrecords: true,
imgpath: '../js/themes/basic/images',
caption: 'Contacts Demo',
height:300,
altRows: true,
loadonce: true
});
});
The server-side code to return the JSON data:
<%@ WebHandler Language="C#" Class="ContactDemo" %>
using System;
using System.Text;
using System.Web;
using SubSonic;
using DJ.Business;
public class ContactDemo : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/plain";
Query qry = Contact.Query();
qry.SetSelectList(Contact.Columns.Id + "," + Contact.Columns.City + "," + Contact.Columns.State + "," + Contact.Columns.ZipCode);
qry.AddWhere(Contact.Columns.City, Comparison.IsNot, null);
qry.AddWhere(Contact.Columns.City, Comparison.NotEquals, "");
qry.AddWhere(Contact.Columns.ZipCode, Comparison.IsNot, null);
qry.AddWhere(Contact.Columns.ZipCode, Comparison.NotEquals, "");
qry.ORDER_BY(Contact.Columns.City + "," + Contact.Columns.ZipCode);
ContactCollection contacts = new ContactCollection();
contacts.LoadAndCloseReader(qry.ExecuteReader());
StringBuilder sb = new StringBuilder();
sb.Append("{\"total\":1,\"page\":1,\"records\":");
sb.Append(contacts.Count);
sb.Append(",\"rows\":[");
foreach (Contact contact in contacts)
{
sb.Append("{\"i\":");
sb.Append(contact.Id.ToString());
sb.Append(",\"cell\":[\"");
sb.Append(contact.Id);
sb.Append("\",\"");
sb.Append(contact.City);
sb.Append("\",\"");
sb.Append(contact.State);
sb.Append("\",\"");
sb.Append(contact.ZipCode);
sb.Append("\"]},");
}
if (sb.ToString().EndsWith(","))
{
sb.Remove(sb.Length - 1, 1);
}
sb.Append("]}");
context.Response.Write(sb.ToString());
}
public bool IsReusable {
get {
return false;
}
}
}