This is a migrated thread and some comments may be shown as answers.

RadFilter losing values inside filter expressions

2 Answers 72 Views
Filter
This is a migrated thread and some comments may be shown as answers.
Heath
Top achievements
Rank 1
Heath asked on 23 Jul 2014, 01:28 PM
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 Answers, 1 is accepted

Sort by
0
Heath
Top achievements
Rank 1
answered on 23 Jul 2014, 01:37 PM
I should have had this in the problem description.   If the user hits the refresh button a second time, everything is perfect.
0
Vasil
Telerik team
answered on 28 Jul 2014, 11:25 AM
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.

 
Tags
Filter
Asked by
Heath
Top achievements
Rank 1
Answers by
Heath
Top achievements
Rank 1
Vasil
Telerik team
Share this question
or