RadFilter losing values inside filter expressions

3 posts, 0 answers
  1. Heath
    Heath avatar
    2 posts
    Member since:
    Apr 2014

    Posted 23 Jul 2014 Link to this post

    Hello forum...  long time reader, first time poster.

    I do have a support ticket open on this issue, but we seem to be stuck.  I thought I'd ask the forum community if anyone had any ideas.

    Short version...  I am updating a RadFilter in a server side callback.   Immediately after updating it, the client side filter values and the grid it is filtering look great.  I have a button for refreshing the grid.  The first time the user hits that button after the filter is set, the filter is hosed.  By hosed, I mean that the right expressions/etc are there, but their value is 0 (or Nothing depending on the type).   I do have the need for manipulating the sql string that the filter produces, so I am using a RadFilterSqlQueryProvider in my callbacks.  Another thing to note, it happens whether EnabledAJAX is true or false.

    In working with the support ticket, I was able to reduce the problem to a pretty small example.  I would LOVE it if some Telerik guru could tell me what I'm doing wrong or if there is a better way to do it.  I have been stuck on this for 3 weeks. ;(

    <%@ Page Title="" Language="vb" AutoEventWireup="false" CodeBehind="RadSample.aspx.vb" Inherits="HelpDesk.RadSample" %>
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <head id="Head1" runat="server">
        <title><%= HelpDesk.GetAppConfigValue("AppTitle")  %></title>
     
        <telerik:RadStyleSheetManager ID="styleSheetMgr" runat="server" />
        
        <telerik:RadScriptBlock ID="RadScriptBlock1" runat="server">
          <script src="<%= HelpDesk.WebUtil.GetVirtualPath()%>/Scripts/helpdesk.js?<%= HelpDesk.WebUtil.GetRevision()%>" type="text/javascript"></script>
          <script type="text/javascript">
              var prefix = '<%= HelpDesk.WebUtil.GetVirtualPath() %>';
              var username = '<%= Membership.GetUser().Username %>';
          </script>
        </telerik:RadScriptBlock>
     
        <link href="~/Styles/DataStyle.css" rel="stylesheet" type="text/css" />
        <link href="~/Styles/OtherStyles.css" rel="stylesheet" type="text/css" />
        <link href="~/Styles/Style.css" rel="stylesheet" type="text/css" />
        <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
       <link href="~/Styles/Menu.css" rel="stylesheet" type="text/css" />
     
    </head>
    <body onload="RadMasterLoaded();">
        <form id="form1" runat="server">
        <telerik:RadScriptManager ID="MainRadScriptManager" runat="server" EnablePageMethods="true">
            <Scripts>
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" />
            </Scripts>
        </telerik:RadScriptManager>
     
        <telerik:RadAjaxManager runat="server" ID="AjaxManager" EnableAJAX="false" >
        <AjaxSettings>
          <telerik:AjaxSetting AjaxControlID="TicketFilter">
            <UpdatedControls>
              <telerik:AjaxUpdatedControl ControlID="TicketGrid" LoadingPanelID="LoadingPanel" />
              <telerik:AjaxUpdatedControl ControlID="TicketFilter" />
              <telerik:AjaxUpdatedControl ControlID="TestRefresh" />
              <telerik:AjaxUpdatedControl ControlID="UsedFilter" />
            </UpdatedControls>
          </telerik:AjaxSetting>
          <telerik:AjaxSetting AjaxControlID="TestRefresh">
            <UpdatedControls>
              <telerik:AjaxUpdatedControl ControlID="TicketGrid" LoadingPanelID="LoadingPanel" />
              <telerik:AjaxUpdatedControl ControlID="TicketFilter" />
              <telerik:AjaxUpdatedControl ControlID="TestRefresh" />
              <telerik:AjaxUpdatedControl ControlID="UsedFilter" />
            </UpdatedControls>
          </telerik:AjaxSetting>
          <telerik:AjaxSetting AjaxControlID="SetFilter">
            <UpdatedControls>
              <telerik:AjaxUpdatedControl ControlID="TicketGrid" LoadingPanelID="LoadingPanel" />
              <telerik:AjaxUpdatedControl ControlID="TestRefresh" />
              <telerik:AjaxUpdatedControl ControlID="TicketFilter" />
              <telerik:AjaxUpdatedControl ControlID="SetFilter" />
              <telerik:AjaxUpdatedControl ControlID="UsedFilter" />
            </UpdatedControls>
          </telerik:AjaxSetting>
          <telerik:AjaxSetting AjaxControlID="TicketGrid">
            <UpdatedControls>
              <telerik:AjaxUpdatedControl ControlID="TicketGrid" LoadingPanelID="LoadingPanel" />
              <telerik:AjaxUpdatedControl ControlID="TicketFilter" />
              <telerik:AjaxUpdatedControl ControlID="TestRefresh" />
              <telerik:AjaxUpdatedControl ControlID="UsedFilter" />
            </UpdatedControls>
          </telerik:AjaxSetting>
        </AjaxSettings>
      </telerik:RadAjaxManager>
     
      <telerik:RadAjaxLoadingPanel ID="LoadingPanel" runat="server" Width="100%" Height="100%" BackColor="Black"
          Transparency="75">Loading
      </telerik:RadAjaxLoadingPanel>
     
      <asp:Label runat="server" ID="UsedFilter" />
     
      <telerik:RadFilter runat="server" ID="TicketFilter" ShowApplyButton="true" FilterContainerID="TicketGrid"
          OperationMode="Server" ExpressionPreviewPosition="None" />
      <telerik:RadButton runat="server" ID="TestRefresh" OnClick="DoTheRefresh" Text="RefreshMe" />
      <telerik:RadButton runat="server" ID="SetFilter" OnClick="SetFilterClick" Text="SetFilter" />
     
     
        <telerik:RadGrid ID="TicketGrid" runat="server" Height="100%" Width="100%"
          OnNeedDataSource="TG_NeedDataSource"
          AutoGenerateColumns="false" AllowSorting="True" GridLines="None"
          EnableLinqExpressions="false" AllowAutomaticUpdates="true" >
        <MasterTableView TableLayout="Fixed" IsFilterItemExpanded="true" Name="Tickets"
            DataKeyNames="TID" CommandItemDisplay="None" AllowMultiColumnSorting="true" Width="100%" >
     
          <Columns>
            <telerik:GridBoundColumn DataField="TID" DataType="System.Int16" UniqueName="TID" ForceExtractValue="Always"
               HeaderText="TID" headerstyle-width="60px" ReadOnly="true" />
            <telerik:GridBoundColumn DataField="TicketTitle" UniqueName="TicketTitle" HeaderText="Title"
               ItemStyle-Wrap="false" ColumnEditorID="TextEditor" ItemStyle-Font-Bold="true"  headerstyle-width="300px" />
          </Columns>
        </MasterTableView>
      </telerik:RadGrid>
        </form>
      </body>
    </html>

    Imports Telerik.Web.UI
     
     
    Public Class RadSample
        Inherits System.Web.UI.Page
     
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        End Sub
     
     
        Protected Sub TG_NeedDataSource(sender As Object, e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles TicketGrid.NeedDataSource
            UsedFilter.Text = "Used Filter: " + TicketGrid.MasterTableView.FilterExpression
     
            TicketGrid.DataSource = GetTickets()
        End Sub
     
     
        Protected Sub DoTheRefresh(sender As Object, e As System.EventArgs) Handles TestRefresh.Click
            Dim provider As RadFilterSqlQueryProvider = New RadFilterSqlQueryProvider()
            provider.ProcessGroup(TicketFilter.RootGroup)
            TicketGrid.MasterTableView.FilterExpression = provider.Result
     
            TicketGrid.Rebind()
        End Sub
     
     
        Protected Sub SetFilterClick(sender As Object, e As System.EventArgs) Handles SetFilter.Click
            TicketFilter.RootGroup.AddExpression(New RadFilterLessThanFilterExpression(Of Integer)("TID") _
                With {.Value = "400"})
            TicketGrid.Rebind()
        End Sub
     
        Private Function GetTickets()
            Dim dataTable As DataTable
            dataTable = New DataTable("Tickets")
            dataTable.Columns.Add("TID")
            dataTable.Columns.Add("TicketTitle")
     
            dataTable.Rows.Add(New Object() {1, "The initial data load should show all tickets. (1-701)"})
            dataTable.Rows.Add(New Object() {101, "Then hit the SetFilter button and only tickets 1-301 should show."})
            dataTable.Rows.Add(New Object() {201, "Then hitting RefresheMe should still display 1-301, but it empties the grid because the filter is wrong."})
            dataTable.Rows.Add(New Object() {301, "Hitting RefreshMe again though fixes the filter and shows 1-301."})
            dataTable.Rows.Add(New Object() {401, "Hi"})
            dataTable.Rows.Add(New Object() {501, "Hi"})
            dataTable.Rows.Add(New Object() {601, "Hi"})
            dataTable.Rows.Add(New Object() {701, "Hi"})
     
            GetTickets = dataTable
        End Function
     
    End Class

    Thank you...
    Heath

  2. Heath
    Heath avatar
    2 posts
    Member since:
    Apr 2014

    Posted 23 Jul 2014 in reply to Heath Link to this post

    I should have had this in the problem description.   If the user hits the refresh button a second time, everything is perfect.
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Vasil
    Admin
    Vasil avatar
    1547 posts

    Posted 28 Jul 2014 Link to this post

    Hi Heath,

    We have discussed this in your ticket in our support system.

    But I will write here in case others have such problem:
    It turned out to be bug in the RadFilter, and currently the resolution is to call TicketFilter.RecreateControl() before provider.ProcessGroup(TicketFilter.RootGroup).

    Regards,
    Vasil
    Telerik
     

    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.

     
Back to Top