Hi There,
I am using a custom filter in my RadGrid, but when debugging I noticed that the OnTextChanged event got triggered twice. However, if I remove the AjaxSetting section, everything works fine. But I do need to config ajax settings in my application. Is there anyone to explain why this is happening? The following is the demo code. Thanks a lot.
TestCustomFilter.aspx
<%@ Page Language="C#" AutoEventWireup="true" EnableViewStateMac="false" ViewStateEncryptionMode="Never" CodeFile="TestCustomFilter.aspx.cs" Inherits="TestCustomFilter" %><%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns='http://www.w3.org/1999/xhtml'><head id="Head1" runat="server"> <title>Telerik ASP.NET Example</title> <link rel="Stylesheet" href="../Styles/styles.css" /></head><body> <form id="form1" runat="server"> <telerik:RadScriptManager runat="server" ID="RadScriptManager1" /> <telerik:RadSkinManager ID="RadSkinManager1" runat="server" ShowChooser="true" /> <div class="demo-container size-medium"> <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="RadGrid1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1"></telerik:AjaxUpdatedControl> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManager> <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server"> </telerik:RadAjaxLoadingPanel> <telerik:RadGrid ID="RadGrid1" runat="server" OnNeedDataSource="RadGrid1_NeedDataSource" GridLines="None" AllowPaging="true" AllowSorting="true" PageSize="10" AllowFilteringByColumn="true"> <MasterTableView AutoGenerateColumns="False" CommandItemDisplay="None" CurrentResetPageIndexAction="SetPageIndexToFirst" DataKeyNames="OrderID" Dir="LTR" Frame="Border" TableLayout="Auto"> <Columns> <telerik:GridBoundColumn CurrentFilterFunction="NoFilter" DataField="OrderID" Display="false" DataType="System.Int32" FilterListOptions="VaryByDataType" ForceExtractValue="None" HeaderText="OrderID" ReadOnly="True" SortExpression="OrderID" UniqueName="OrderID"> </telerik:GridBoundColumn> <telerik:GridTemplateColumn UniqueName="ShipName" HeaderText="Ship Name" SortExpression="ShipName"> <FilterTemplate> <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True" OnTextChanged="TextBox1_TextChanged"></asp:TextBox> </FilterTemplate> <ItemTemplate> <asp:HyperLink ID="targetControl" runat="server" NavigateUrl="#" Text='<%# Eval("ShipName") %>'></asp:HyperLink> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn AllowSorting="true" DataField="ShipCountry" HeaderText="Ship Country" SortExpression="ShipCountry" UniqueName="ShipCountry"> </telerik:GridBoundColumn> </Columns> <PagerStyle PageSizeControlType="RadDropDownList" ShowPagerText="false" /> </MasterTableView> </telerik:RadGrid> </div> </form></body></html>
TestCustomFilter.aspx.cs
using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;using System.Collections.Generic;using Telerik.Web.UI;using System.IO;public partial class TestCustomFilter : System.Web.UI.Page{ public class MyOrder { public int OrderID { get; set; } public DateTime OrderDate { get; set; } public double Freight { get; set; } public string ShipName { get; set; } public string ShipCountry { get; set; } } protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) { LoadData(); } protected void RadGrid1_PreRender(object sender, EventArgs e) { LoadData(); } private void LoadData() { MyOrder _order1 = new MyOrder(); _order1.OrderID = 1; _order1.OrderDate = new DateTime(2014, 1, 18); _order1.Freight = 15.61; _order1.ShipCountry = "Canada"; _order1.ShipName = "David"; MyOrder _order2 = new MyOrder(); _order2.OrderID = 2; _order2.OrderDate = new DateTime(2015, 9, 12); _order2.Freight = 12.39; _order2.ShipCountry = "US"; _order2.ShipName = "Jack"; MyOrder _order3 = new MyOrder(); _order3.OrderID = 3; _order3.OrderDate = new DateTime(2015, 6, 2); _order3.Freight = 6.81; _order3.ShipCountry = "Mexico"; _order3.ShipName = "Howard"; MyOrder _order4 = new MyOrder(); _order4.OrderID = 4; _order4.OrderDate = new DateTime(2014, 3, 26); _order4.Freight = 19.92; _order4.ShipCountry = "Canada"; _order4.ShipName = "William"; MyOrder _order5 = new MyOrder(); _order5.OrderID = 5; _order5.OrderDate = new DateTime(2015, 5, 15); _order5.Freight = 9.96; _order5.ShipCountry = "US"; _order5.ShipName = "Don"; List<MyOrder> _myList = new List<MyOrder>(); _myList.Add(_order1); _myList.Add(_order2); _myList.Add(_order3); _myList.Add(_order4); _myList.Add(_order5); RadGrid1.DataSource = _myList; } protected void TextBox1_TextChanged(object sender, EventArgs e) { TextBox TextBox1 = sender as TextBox; GridColumn column = RadGrid1.MasterTableView.GetColumnSafe("ShipName"); column.CurrentFilterFunction = GridKnownFunction.Contains; column.CurrentFilterValue = TextBox1.Text.Trim(); RadGrid1.Rebind(); }}