public class StageFilterColumn : GridBoundColumn
{
public StageFilterColumn ()
{
}
protected override void SetupFilterControls(TableCell cell)
{
base.SetupFilterControls(cell);
cell.Controls.RemoveAt(0);
DropDownList list = new DropDownList();
list.ID = "list" + this.DataField;
list.AutoPostBack = true;
list.SelectedIndexChanged += new EventHandler(list_SelectedIndexChanged);
cell.Controls.AddAt(0, list);
cell.Controls.RemoveAt(1);
List<string> stagesStringList = GetDistinctStages();
ListItem li0 = new ListItem("All Stages", "-1");
list.Items.Add(li0);
foreach (string stage in stagesStringList)
{
ListItem listItem = new ListItem(stage, stage);
list.Items.Add(listItem);
}
}
void list_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList dl = (DropDownList)sender;
GridFilteringItem filterItem = dl.NamingContainer as GridFilteringItem;
if (dl.SelectedItem.Value != "-1")
filterItem.FireCommandEvent("Filter", new Pair("EqualTo", this.UniqueName));
else
filterItem.FireCommandEvent("Filter", new Pair("NoFilter", this.UniqueName));
}
//RadGrid calls this method when the value should be set to the filtering input control(s)
protected override void SetCurrentFilterValueToControl(TableCell cell)
{
base.SetCurrentFilterValueToControl(cell);
DropDownList list = (DropDownList)cell.Controls[0];
if (this.CurrentFilterValue != string.Empty)
{
list.SelectedValue = this.CurrentFilterValue;
}
}
//RadGrid calls this method to extract the filtering value from the filtering input control(s)
protected override string GetCurrentFilterValueFromControl(TableCell cell)
{
DropDownList list = (DropDownList)cell.Controls[0];
return list.SelectedValue;
}
protected override string GetFilterDataField()
{
return this.DataField;
}
}
I am also filtering on other columns where the user types something and then tabs away from the text box and it does an auto postback to filter the data but it returns no data at all. If I filter by my custom column then it is fine. If I filter by my custom column and then filter by any other column it also works as expected.
When I filter by any other column the first time (this is when no data is returned when I know it should be) I looked at the filter expression and basically it is something like this (if (column1Filter == "criteriaIEntered" && customFilterColumn = "-1"). I believe the second bit customFilterColumn = "-1" causes the problem even though I am not filtering by this.
var
column = null;
function MenuShowing(sender, args) {
if (column == null)
return;
var menu = sender;
var items = menu.get_items();
if (column.get_dataType() == "System.String") {
var i = 0;
while (i < items.get_count()) {
if (!(items.getItem(i).get_value() in { 'NoFilter': '', 'Contains': '', 'DoesNotContain': '', 'StartsWith': '', 'EndsWith': '', 'NotEqualTo': '', 'EqualTo': '' })) {
var item = items.getItem(i);
if (item != null)
item.set_visible(
false);
}
else {
var item = items.getItem(i);
if (item != null)
item.set_visible(
true);
}
i++;
}
}
if (column.get_dataType() == "System.Int64") {
var j = 0;
while (j < items.get_count()) {
if (!(items.getItem(j).get_value() in { 'NoFilter': '', 'GreaterThan': '', 'LessThan': '', 'NotEqualTo': '', 'EqualTo': '', 'Contains': '', 'DoesNotContain': '', 'StartsWith': '', 'EndsWith': '' })) {
var item = items.getItem(j);
if (item != null)
item.set_visible(
false);
}
else {
var item = items.getItem(j);
if (item != null)
item.set_visible(
true);
}
j++;
}
}
if (column.get_dataType() == "System.Boolean") {
var j = 0;
while (j < items.get_count()) {
if (!(items.getItem(j).get_value() in { 'NoFilter': '', 'EqualTo': '' })) {
var item = items.getItem(j);
if (item != null)
item.set_visible(
false);
}
else {
var item = items.getItem(j);
if (item != null)
item.set_visible(
true);
}
j++;
}
}
column =
null;
}
function filterMenuShowing(sender, eventArgs) {
column = eventArgs.get_column();
}
<telerik:RadGrid runat="server" Width="580px" Height="350px" Style="margin: 7px 0px 0px 7px;"
ID="grdDelegation" AutoGenerateColumns="False" AllowPaging="True" GridLines="None"
PageSize="5" AllowFilteringByColumn="true"
<
ClientSettings EnablePostBackOnRowClick="true" AllowColumnsReorder="True" ReorderColumnsOnClient="True">
<Selecting AllowRowSelect="True" />
<ClientEvents OnFilterMenuShowing="filterMenuShowing" />
</ClientSettings>
<GroupingSettings CaseSensitive="false" />
<FilterMenu OnClientShown="MenuShowing" />
<HeaderStyle Font-Bold="true" HorizontalAlign="Center" />
<?
xml version="1.0"?>
<
configuration>
<
configSections>
<
sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<
sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<
section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<
sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<
section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
<
section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<
section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<
section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/></sectionGroup></sectionGroup></sectionGroup></configSections><appSettings/>
<
connectionStrings/>
<
system.web>
<!--
Set compilation debug="true" to insert debugging
symbols into the compiled page. Because this
affects performance, set this value to true only
during development.
Visual Basic options:
Set strict="true" to disallow all data type conversions
where data loss can occur.
Set explicit="true" to force declaration of all variables.
-->
<
compilation debug="true" strict="false" explicit="true">
<
assemblies>
<
add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<
add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<
add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<
add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<
add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<
add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<
add assembly="System.Speech, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<
add assembly="Telerik.Web.Design, Version=2010.2.929.35, Culture=neutral, PublicKeyToken=121FAE78165BA3D4"/>
</
assemblies></compilation>
<
pages>
<
namespaces>
<
clear/>
<
add namespace="System"/>
<
add namespace="System.Collections"/>
<
add namespace="System.Collections.Specialized"/>
<
add namespace="System.Configuration"/>
<
add namespace="System.Text"/>
<
add namespace="System.Text.RegularExpressions"/>
<
add namespace="System.Web"/>
<
add namespace="System.Web.Caching"/>
<
add namespace="System.Web.SessionState"/>
<
add namespace="System.Web.Security"/>
<
add namespace="System.Web.Profile"/>
<
add namespace="System.Web.UI"/>
<
add namespace="System.Web.UI.WebControls"/>
<
add namespace="System.Web.UI.WebControls.WebParts"/>
<
add namespace="System.Web.UI.HtmlControls"/>
</
namespaces>
<
controls>
<
add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<
add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></controls></pages>
<!--
The <authentication> section enables configuration
of the security authentication mode used by
ASP.NET to identify an incoming user.
-->
<
authentication mode="None"/>
<!--
The <customErrors> section enables configuration
of what to do if/when an unhandled error occurs
during the execution of a request. Specifically,
it enables developers to configure html error pages
to be displayed in place of a error stack trace.
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
-->
<
customErrors mode="Off"/>
<
httpHandlers>
<
remove verb="*" path="*.asmx"/>
<
add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<
add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<
add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></httpHandlers>
<
httpModules>
<
add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></httpModules></system.web>
<
system.codedom>
<
compilers>
<
compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
<
providerOption name="CompilerVersion" value="v3.5"/>
<
providerOption name="WarnAsError" value="false"/></compiler>
<
compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
<
providerOption name="CompilerVersion" value="v3.5"/>
<
providerOption name="OptionInfer" value="true"/>
<
providerOption name="WarnAsError" value="false"/></compiler></compilers></system.codedom>
<
system.webServer>
<
validation validateIntegratedModeConfiguration="false"/>
<
modules>
<
remove name="ScriptModule"/>
<
add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></modules>
<
handlers>
<!--
<add path="Telerik.Web.UI.WebResource.axd" verb="*" type="Telerik.Web.UI.WebResource, Telerik.Web.UI, Version=2010.2.929.35, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
name="Telerik.Web.UI.WebResource"/>
-->
<
remove name="WebServiceHandlerFactory-Integrated"/>
<
remove name="ScriptHandlerFactory"/>
<
remove name="ScriptHandlerFactoryAppServices"/>
<
remove name="ScriptResource"/>
<
add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<
add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<
add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></handlers></system.webServer>
<
runtime>
<
assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<
dependentAssembly>
<
assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
<
bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/></dependentAssembly>
<
dependentAssembly>
<
assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
<
bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/></dependentAssembly></assemblyBinding></runtime></configuration>