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. ;(
Thank you...
Heath
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"><html xmlns="http://www.w3.org/1999/xhtml"><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.UIPublic 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 FunctionEnd ClassThank you...
Heath