I’ve recently started to use Telerik’s Kendo UI framework for web applications and I have to say I’m very impressed. Although it does come with a bunch of server side extensions for ASP.NET MVC I’ve found that the javascript configuration to be just as easy.
Sample Data
For these posts I’ll be using various sample data. In this post, the data is visitor numbers to UK tourist attractions which I got from The Guardian.If you want to take the data and play with this sample, you can find the bva-data.js file as a gist on github.
I pulled the data into a .NET application and converted it to JSON. First I took the spreadsheet I downloaded and then saved it as CSV file. I brought it into my .NET application using a .NET CSV Reader I found on Code Project.
Grid configuration
$(function(){
var data = getData(); // From the bva-data.js file
$('#MyGrid').kendoGrid({
dataSource: {
data: data,
schema: {
model: {
fields: {
Site: {type: "string" },
Visitors: {type: "number" },
FreeCharge: {type: "string" },
Change: {type: "number" }
}
}
}
},
filterable: true,
columnMenu: false,
sortable: true,
columns: [
{ field: "Site" },
{ field: "Visitors" },
{ field: "FreeCharge" }, ]
{ field: "Change", template: "#= kendo.toString(Change, \"p\") #" }
]
});
});
First off, getData()
is a simply loads the data so it is available in one array to start with. I didn’t want to complicate this with having lots of calls to other services.
The schema
defines how the data is to be interpreted.
filterable
defines if the grid columns can be filtered or not. How that filter is represented to user depends on whether columnMenu
is true or false.
filterable : true
When filterable
is set to true
then an icon will appear in the right of the column header to indicate that you can apply a filter.
The filter allows you to specify one or two criteria for filtering the column.

Example: filterable demo.
schema
I’m not going to go too much into the schema at the moment. Suffice to say that it allows to to define how the grid interprets the data that has been sent to it.
In this example, I’m using the schema to define the type
of each field in the data. That way the filtering options can interpret the data correctly. For example, the Visitors column is a number
, so it would be better to give filter options such as “greater than” or “less than” instead of the default string filter options of “contains” or “starts with”. Like this:

Other data types that the schema.model can interpret are string
(the default), boolean
, and date
.
columnMenu : true
By default, if you don’t specifiy a columnMenu
, it will be false
. and you won’t get the menu. If, however, you set columnMenu
to true
then there will be a small down-arrow displayed which when clicked displays the menu.
Without any other settings, the menu will just allow you to turn on and off columns. If you set sortable
to true
then you also get the “Sort Ascending” and “Sort Descending” options. And if you set filterable
to true
then you get a menu item for filtering the data as the menu item replaces the icon for filtering the data in the column header.
The image below shows the columnMenu
with the sortable
and filterable
options turned on.

Example: columnMenu demo.
template
In the definition of the Change
column is a template parameter. This defines how the column should be displayed if it should not be simply displayed as is.
In this example, all that is happening is that the number is being represented as a percentage. The data contains the information as a floating point number so that a value of 0.05 is displayed as 5%.
Templated values are set between two # markers. After the opening marker you can put an equal sign or colon depending on how you want the value rendered. The =
indicates the value is rendered as is, the :
indicates that the value is to be HTML encoded before being rendered.
There is a toString function that allows you to format data in various ways. In this example, I’m taking a number and formatting it as a percentage. Like this:
#= kendo.toString(Change, "p") #
Just remember that if you have quotation marks inside your template to escape them if needs be for the code that the template is defined within.
Updates
- 24/7/2012: Added links to demos.