To reproduce: use the code from our demo application for Custom Filtering. Instead of Customers table, bind the grid to Orders or another table with 1000+ rows. Resolution: You can surround the row operation in Begin/EndUpdate(false) and remove the InvalidateRow method. The Custom Filtering example in our demo Application is updated for better performance or you can use the following code snippet: For example: private void radGridView1_CustomFiltering(object sender, Telerik.WinControls.UI.GridViewCustomFilteringEventArgs e) { if (string.IsNullOrEmpty(this.radTextBox1.Text)) { this.radGridView1.BeginUpdate(); e.Visible = true; for (int i = 0; i < this.radGridView1.ColumnCount; i++) { e.Row.Cells[i].Style.Reset(); } //e.Row.InvalidateRow(); this.radGridView1.EndUpdate(false); return; } this.radGridView1.BeginUpdate(); e.Visible = false; for (int i = 0; i < this.radGridView1.ColumnCount; i++) { string text = e.Row.Cells[i].Value.ToString(); if (text.IndexOf(this.radTextBox1.Text, 0, StringComparison.InvariantCultureIgnoreCase) >= 0) { e.Visible = true; e.Row.Cells[i].Style.CustomizeFill = true; e.Row.Cells[i].Style.DrawFill = true; e.Row.Cells[i].Style.BackColor = Color.FromArgb(201, 252, 254); } else { e.Row.Cells[i].Style.Reset(); } } //e.Row.InvalidateRow(); this.radGridView1.EndUpdate(false); }