samedi 27 juin 2015

Ajaxfied RadGrid RadCombo FilterTemplate

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...

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…

Aucun commentaire:

Enregistrer un commentaire