New to Telerik UI for ASP.NET AJAX? Download free 30-day trial

Adding Sort and Filter Expressions with Client-side Binding

This help topic illustrates how you can add sort and filter expressions for the grid when it is bound client-side.

Add sort expressions

RadGrid does not have public API for adding sort expressions on the client. However one can use the below methods to add a sort expression or multiple sort expressions.

<script type="text/javascript">
    function AddSortExpression(grid, fieldName, sortOrder) {
        var sortExpression = new Telerik.Web.UI.GridSortExpression();
        sortExpression.set_fieldName(fieldName);
        sortExpression.set_sortOrder(sortOrder);//integer: 1 - ascending, 2 - descending
        grid.get_masterTableView()._sortExpressions.add(sortExpression);
        grid.get_masterTableView()._showSortIconForField(fieldName, sortOrder);
    }
</script>

Add filter expressions

To add a new filter expression to your client-side bound grid, one should call the following grid methods.

<script type="text/javascript">
    function AddFilterExpression(grid, columnUniqueName, dataField, filterFunction, filterValue) {
        /* Some of the FilterControls such as a DatePicker, may have not finished rendering, as a result the Object is not available 
        and getting/setting their values cannot be done.
        For that reason, applying a little delay using setTimeout() function. 
        This will put the script execution in order, and ensures that the Filter Controls are rendered before applying new Expressions. */
        setTimeout(function () {
            var filterExpression = new Telerik.Web.UI.GridFilterExpression();
            var column = grid.get_masterTableView().getColumnByUniqueName(columnUniqueName);
            column.set_filterFunction("Contains");
            filterExpression.set_fieldName(dataField);
            filterExpression.set_fieldValue(filterValue);
            filterExpression.set_filterFunction(filterFunction);
            filterExpression.set_columnUniqueName(columnUniqueName);
            grid.get_masterTableView()._updateFilterControlValue(filterValue, columnUniqueName, filterFunction);
            grid.get_masterTableView()._filterExpressions.add(filterExpression);
        }, 15);
    }
</script>

Add default sort and filter expressions

Then if you want to have your client-side bound grid sorted and filtered by default, handle its OnGridCreated client-side event and there call the above functions.

<script type="text/javascript">
    function GridCreated(sender, args) {
        var grid = $find("<%=RadGrid1.ClientID %>");

        var fieldName = "Name";
        var sortOrder = Telerik.Web.UI.GridSortOrder.Descending;
        AddSortExpression(grid, fieldName, sortOrder);

        fieldName = "ID";
        sortOrder = Telerik.Web.UI.GridSortOrder.Descending;
        AddSortExpression(grid, fieldName, sortOrder);

        var columnUniqueName = "Name";
        var dataField = "Name";
        var filterFunction = Telerik.Web.UI.GridFilterFunction.Contains;
        var filterValue = "Ma";
        AddFilterExpression(grid, columnUniqueName, dataField, filterFunction, filterValue);
    }
</script>
<telerik:RadGrid RenderMode="Lightweight" ID="RadGrid1" AllowSorting="true" AllowPaging="true" AllowFilteringByColumn="true"
    AutoGenerateColumns="false" runat="server">
    <MasterTableView>
        <Columns>
            <telerik:GridBoundColumn DataField="ID" HeaderText="ID" DataType="System.Int32" />
            <telerik:GridBoundColumn DataField="Name" HeaderText="Name" />
            <telerik:GridNumericColumn DataField="UnitPrice" HeaderText="Unit price" DataType="System.Decimal" />
            <telerik:GridBoundColumn DataField="Date" DataFormatString="{0:d}" HeaderText="Date"
                DataType="System.DateTime" />
            <telerik:GridCheckBoxColumn DataField="Discontinued" HeaderText="Discontinued" DataType="System.Boolean" />
        </Columns>
    </MasterTableView>
    <PagerStyle AlwaysVisible="true" />
    <ClientSettings>
        <ClientEvents OnGridCreated="GridCreated" />
        <DataBinding Location="WebService.asmx" SelectMethod="GetDataAndCount" />
    </ClientSettings>
</telerik:RadGrid>
In this article