I want to know how to implement custom filter in RadGrid.
I have a Ajaxfied RadGrid and datasource is binded in NeedDatasource event. The RadGrid has five columns..
In that, I want to change the filter of one of the column to selectable filter..
So, I added a FilterTemplate and added the RadComboBox inside to it..
Initially, I hardcoded all the RadComboBox item in the design time itself.. Binded a javascript to clientside_selectedchanged event.. This approach worked fine..
When I binded RadComboBox with collection (List) in the code behind.. The filtering didn't work.. I binded the RadComboBox in GridItemDataBound or GridItemCreated event.. But no luck..
Any help.. will be very much useful to me.. I spent nearly two days but I didn't any direction... I'm nearing to my deadline.. so I have no other option left out other than this forum..
Custom Filter Code
The following is sample code which I copied from my project and pasted here.. I have changed the field names alone..
Filter Template:
<telerik:GridBoundColumn DataField="DepartmentDescription" Groupable="true" HeaderText="Program" UniqueName="DepartmentDescription">
<FilterTemplate>
<telerik:RadComboBox ID="RadComboBoxDepartmentDescription" runat="server"
AppendDataBoundItems="true"
DataTextField="DepartDesc"
DataValueField=" DepartDesc "
OnClientSelectedIndexChanged="RadComboBoxDepartmentDescriptionIndexChanged"
OnDataBound="RadComboBoxAllFilters_OnDataBound"
SelectedValue='<%#TryCast(Container,GridItem).OwnerTableView.GetColumn("DepartmentDescription ").CurrentFilterValue%>'
Width="100px">
<Items>
<telerik:RadComboBoxItem Text="All" Value="" />
</Items>
</telerik:RadComboBox>
<telerik:RadScriptBlock ID="RadScriptBlockProgram" runat="server">
<script type="text/javascript">
function RadComboBoxDepartmentDescriptionIndexChanged(sender, args) {
var tableView = $find("<%# TryCast(Container,GridItem).OwnerTableView.ClientID%>");
tableView.filter("DepartmentDescription", args.get_item().get_value(), "EqualTo");
}
</script>
</telerik:RadScriptBlock>
</FilterTemplate>
<ItemStyle Wrap="False" />
<HeaderStyle Wrap="false" />
</telerik:GridBoundColumn>
RadGrid DataBinding Code
protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
(sender as RadGrid).DataSource = employeeList; //This is a list of employee of values.. which comes from service layer.. of type .. List<Employee>
}
RadGrid UI Code
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="RadGrid1">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="RadGrid1"></telerik:AjaxUpdatedControl>
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>
</telerik:RadAjaxManager>
<div>
<telerik:RadGrid runat="server" ID="RadGrid1" AllowPaging="True" AllowSorting="true"
OnNeedDataSource="RadGrid1_NeedDataSource"
..other code I removed it.. like the grid events and bound columns definitions
</telerik:RadGrid>
RadComboBox Filter DataBinding Code in the Code Behind:
Protected Sub RadGrid1_ItemDataBound(sender As Object, e As Telerik.Web.UI.GridItemEventArgs) Handles RadGrid1.ItemDataBound
If TypeOf e.Item Is Telerik.Web.UI.GridFilteringItem Then
'Populate Filters by binding the combo to datasource
Dim filteringItem As Telerik.Web.UI.GridFilteringItem = CType(e.Item, Telerik.Web.UI.GridFilteringItem)
Dim myRadComboBox As Telerik.Web.UI.RadComboBox = DirectCast(filteringItem.FindControl("RadComboBoxDepartmentDescription"),Telerik.Web.UI.RadComboBox)
myRadComboBox.DataSource = departmentList; //This is a collection which comes from service layer… and the type is List<Department>
myRadComboBox.DataTextField = " DepartmentDescription"
myRadComboBox.DataValueField = " DepartmentDescription"
myRadComboBox.DataBind()
End If
Even I pasted the same code in ItemCreated Event as well but no luck…