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