Create a FilterTemplate In Code-Behinde

3 posts, 1 answers
  1. Daniel
    Daniel avatar
    159 posts
    Member since:
    Feb 2014

    Posted 18 Nov 2014 Link to this post


    I am working on a project with RadGrid.

    I am trying to create a FilterTemplate like this video:

    This is FilterTemplate’s code, created in the designer:
                                <telerik:RadMenu ID="RadMenu1" runat="server" OnClientItemOpened="itemOpened">
                                        <telerik:RadMenuItem PostBack="false" Text="Date Filter">
                                                <div id="DateFilterDivWrapper" class="Wrapper">
                                                    <table id="DateFilterTable">
                                                            <td class="CustomFilter">
                                                                <asp:Label ID="lbl_From" runat="server" Text="From"></asp:Label>
                                                            <td class="CustomFilter">
                                                                <telerik:RadDateTimePicker ID="dt_picker_From" runat="server"></telerik:RadDateTimePicker>
                                                            <td class="CustomFilter">
                                                                <asp:Label ID="lbl_To" runat="server" Text="To"></asp:Label>
                                                            <td class="CustomFilter">
                                                                <telerik:RadDateTimePicker ID="dt_picker_To" runat="server"></telerik:RadDateTimePicker>
                                                            <td colspan="2" style="text-align: center;" class="CustomFilter">
                                                                <telerik:RadButton ID="btn_Filter_Date" runat="server" Text="Filter"></telerik:RadButton>

    However, I want to code to be code-behind, like this:
    01.Private Sub RadGrid1_ColumnCreated(sender As Object, e As Telerik.Web.UI.GridColumnCreatedEventArgs) Handles RadGrid1.ColumnCreated
    02.        If e.Column.ColumnType = "GridDateTimeColumn" Then
    03.            Dim xx As New MyCustomFilteringColumn
    04.            e.Column.FilterTemplate = xx
    05.        End If
    06.    End Sub
    08.Public Class MyCustomFilteringColumn
    09.    Implements ITemplate
    11.    Public Sub InstantiateIn(container As Control) Implements ITemplate.InstantiateIn
    12.        Dim RadMenuItem_DivDate As New RadMenuItem
    13.        Dim insidMenuControl As New Control
    16.        Dim lbl_From, lbl_To As New Label()
    17.        Dim dt_picker_From, dt_picker_To As New RadDateTimePicker
    18.        Dim btn As New RadButton()
    19.        lbl_From.ID = "lbl_From"
    20.        lbl_To.ID = "lbl_To"
    21.        lbl_From.Text = "From" 'can take from resource  (all the .text)
    22.        lbl_To.Text = "To"
    23.        dt_picker_From.ID = "dt_picker_From"
    24.        dt_picker_To.ID = "dt_picker_To"
    25.        btn.ID = "btn_Filter"
    26.        btn.Text = "Filter"
    32.        insidMenuControl.Controls.Add(New Literal With {.Text = "<div id=""DateFilterDivWrapper"">"})
    33.        insidMenuControl.Controls.Add(New Literal With {.Text = "<table id=""DateFilterTable""> <tr>  <td>"})
    34.        insidMenuControl.Controls.Add(lbl_From)
    35.        insidMenuControl.Controls.Add(New Literal With {.Text = "</td> <td>"})
    36.        insidMenuControl.Controls.Add(dt_picker_From)
    37.        insidMenuControl.Controls.Add(New Literal With {.Text = "</td>  </tr> <tr> <td>"})
    38.        insidMenuControl.Controls.Add(lbl_To)
    39.        insidMenuControl.Controls.Add(New Literal With {.Text = " </td> <td>"})
    40.        insidMenuControl.Controls.Add(dt_picker_To)
    41.        insidMenuControl.Controls.Add(New Literal With {.Text = "</td>  </tr> <tr>   <td colspan=""2"" style=""text-align:center;"">"})
    42.        insidMenuControl.Controls.Add(btn)
    43.        insidMenuControl.Controls.Add(New Literal With {.Text = "  </td> </tr>  </table>"})
    44.        insidMenuControl.Controls.Add(New Literal With {.Text = "</div>"})
    46.        RadMenuItem_DivDate.PostBack = False
    47.        RadMenuItem_DivDate.Text = "Date Filter"
    49.        RadMenuItem_DivDate.ContentTemplate.InstantiateIn(insidMenuControl)
    51.        Dim RadMenu_DateFilter As New RadMenu
    52.        RadMenu_DateFilter.ID = "RadMenu_DateFilter"
    53.        RadMenu_DateFilter.OnClientItemOpened = "itemOpened"
    54.        RadMenu_DateFilter.Items.Add(RadMenuItem_DivDate)
    56.        container.Controls.Add(RadMenu_DateFilter)
    58.    End Sub
    59.End Class

    However, when I try to transfer the above code to code-behind I receive the following exception (It occurs on line 49):
    Object reference not set to an instance of an object.
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
    Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

    I would be happy to get a code-behind solution.

    Thank you,
  2. Answer
    Konstantin Dikov
    Konstantin Dikov avatar
    2466 posts

    Posted 21 Nov 2014 Link to this post

    Hello Daniel,

    The issue that you are experiencing is due to the fact that the ContentTemplate of the RadMenuItem must be defined in the same manner as you are defining all other templates - by setting it to an instance of a class that implements ITemplate, something like the following:
    Dim customContentTemplate As New MyCustomMenuItemContentTemplate
    RadMenuItem_DivDate.ContentTemplate = customContentTemplate

    I should also point out that if you need to change the structure of the grid programmatically you need to create the entire RadGrid in the code-behind, as documented in the following help article:
    Hope this helps.

    Konstantin Dikov

    Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

  3. Daniel
    Daniel avatar
    159 posts
    Member since:
    Feb 2014

    Posted 23 Nov 2014 in reply to Konstantin Dikov Link to this post

    Hi Konstantin Dikov,

    Thank you for your reply - it works!!

Back to Top