3 Answers, 1 is accepted
0
Hello Roya,
Yes, it is possible. You should do the following changes in AdvanceFilterControl.cs to achieve desired behavior:
Svett
the Telerik team
Yes, it is possible. You should do the following changes in AdvanceFilterControl.cs to achieve desired behavior:
private void radTextBoxSearch_TextChanged(object sender, EventArgs e) { this.gridView.EndEdit(); GridTableElement tableElement = this.gridView.TableElement; MasterGridViewTemplate masterTemplate = this.gridView.MasterTemplate; tableElement.BeginUpdate(); this.gridView.EnableCustomFiltering = true; masterTemplate.DataView.Refresh(); tableElement.EndUpdate(false); this.gridView.TableElement.ViewElement.UpdateRows(true); } void GridView_CustomFiltering(object sender, GridViewCustomFilteringEventArgs e) { string searchPattern = this.radTextBoxSearch.Text; bool isEmptyPattern = String.IsNullOrEmpty(searchPattern); e.Visible = isEmptyPattern; foreach (GridViewCellInfo cell in e.Row.Cells) { string value = String.Empty; object cellValue = cell.Value; if (cellValue != null && !Convert.IsDBNull(cellValue)) { value = Convert.ToString(cellValue); } bool contains = false; if (!isEmptyPattern) { contains = value.Contains(searchPattern); e.Visible |= contains; } gridView.MasterTemplate.SynchronizationService.SuspendEvent(KnownEvents.RowInvalidated); if (contains) { cell.Style.CustomizeFill = true; cell.Style.BackColor = Color.FromArgb(201, 252, 254); } else { cell.Style.Reset(); } gridView.MasterTemplate.SynchronizationService.ResumeEvent(KnownEvents.RowInvalidated); } e.Handled = !e.Visible; }private void radBtnAdvanceApply_Click(object sender, EventArgs e) { this.gridView.EndEdit(); GridTableElement tableElement = this.gridView.TableElement; MasterGridViewTemplate masterTemplate = this.gridView.MasterTemplate; tableElement.BeginUpdate(); masterTemplate.DataView.Refresh(); tableElement.EndUpdate(false); foreach (GridViewRowInfo row in this.gridView.Rows) { foreach (GridViewCellInfo cell in row.Cells) { cell.Style.Reset(); } } this.gridView.FilterDescriptors.BeginUpdate(); this.gridView.FilterDescriptors.Clear(); FilterDescriptor descriptor = this.advancedFilterDescriptor.Clone() as FilterDescriptor; this.gridView.FilterDescriptors.Add(descriptor); this.gridView.FilterDescriptors.EndUpdate(); }I hope this helps.
Regards,Svett
the Telerik team
RadControls for WinForms Q1'12 release is now live! Check out what's new or download a free trial >>
0
Roya
Top achievements
Rank 1
answered on 15 May 2012, 12:26 PM
Hello Svett
may you tell me where can i find this class and is it possible to add it to my project?
Thank you
may you tell me where can i find this class and is it possible to add it to my project?
Thank you
0
Accepted
Richard Slade
Top achievements
Rank 2
answered on 15 May 2012, 01:22 PM
Hello Roya,
The AdvancedFilterControl.cs file is available in the demo application that is installed on your PC along with the Telerik Controls. Look under Grid View >> Filtering >> Custom Filter Row.
The AdvancedFilterControl.cs class in the demo reads as follows:
AdvancedFilterControl.cs
Hope that helps
Richard
The AdvancedFilterControl.cs file is available in the demo application that is installed on your PC along with the Telerik Controls. Look under Grid View >> Filtering >> Custom Filter Row.
The AdvancedFilterControl.cs class in the demo reads as follows:
AdvancedFilterControl.cs
using System;using System.Collections.Generic;using System.Drawing;using System.Windows.Forms;using Telerik.WinControls;using Telerik.WinControls.Data;using Telerik.WinControls.UI;namespace Telerik.Examples.WinControls.GridView.CreateRowInfo{ public partial class AdvanceFilterControl : UserControl { #region Fields private RadGridView gridView; private FilterDescriptor advancedFilterDescriptor = new FilterDescriptor(String.Empty, FilterOperator.None, null); #endregion #region Constructors public AdvanceFilterControl() { InitializeComponent(); this.radDdlColumns.SelectedIndexChanged += new Telerik.WinControls.UI.Data.PositionChangedEventHandler(radDdlColumns_SelectedIndexChanged); } public AdvanceFilterControl(RadGridView template) : this() { this.gridView = template; } #endregion #region Properties public RadGridView GridView { get { return this.gridView; } set { if (this.gridView != value) { if (this.gridView != null) { this.gridView.CustomFiltering -= new GridViewCustomFilteringEventHandler(GridView_CustomFiltering); } this.gridView = value; if (this.gridView != null) { this.gridView.CustomFiltering += new GridViewCustomFilteringEventHandler(GridView_CustomFiltering); this.UpdateTheme(this.Controls); } this.InitializeAdvanceView(); } } } private void UpdateTheme(ControlCollection controls) { foreach (Control currentControl in controls) { RadControl current = currentControl as RadControl; if (current != null) { current.ThemeName = this.gridView.ThemeName; Telerik.WinControls.UI.RadPageView pageView = current as Telerik.WinControls.UI.RadPageView; if (pageView != null) { foreach (RadPageViewPage page in pageView.Pages) { this.UpdateTheme(page.Controls); } } } } } #endregion #region Methods private void InitializeAdvanceView() { this.radDdlColumns.DataSource = this.gridView.Columns; this.radDdlColumns.ValueMember = "Name"; this.radDdlColumns.DisplayMember = "Name"; } #endregion #region Event Handlers private void radDdlColumns_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e) { this.radDropDownButtonOperator.Items.Clear(); this.rtbValue1.Text = String.Empty; this.rtbValue1.Enabled = false; if (this.radDdlColumns.SelectedItem != null) { GridViewDataColumn dataColumn = this.radDdlColumns.SelectedItem.DataBoundItem as GridViewDataColumn; this.radDropDownButtonOperator.Enabled = true; this.radDropDownButtonOperator.Text = "No Filter"; this.advancedFilterDescriptor.Operator = FilterOperator.None; this.advancedFilterDescriptor.PropertyName = dataColumn.Name; List<FilterOperationContext> listContext = FilterOperationContext.GetFilterOperations(dataColumn.DataType); foreach (FilterOperationContext context in listContext) { RadMenuItem menuItem = new RadMenuItem(context.Name, context.Operator); menuItem.Click += new EventHandler(menuItem_Click); this.radDropDownButtonOperator.Items.Add(menuItem); } } else { this.radDropDownButtonOperator.Enabled = false; this.radDropDownButtonOperator.Text = String.Empty; } } private void menuItem_Click(object sender, EventArgs e) { RadMenuItem menuItem = sender as RadMenuItem; this.radDropDownButtonOperator.Text = menuItem.Text; FilterOperator filterOperator = (FilterOperator)menuItem.Tag; this.advancedFilterDescriptor.Operator = filterOperator; this.rtbValue1.Enabled = filterOperator != FilterOperator.None && filterOperator != FilterOperator.IsNull && filterOperator != FilterOperator.IsNotNull; } private void rtbValue1_TextChanged(object sender, EventArgs e) { if (this.radDdlColumns.SelectedItem != null) { object value = null; if (!String.IsNullOrEmpty(this.rtbValue1.Text)) { GridViewDataColumn dataColumn = this.radDdlColumns.SelectedItem.DataBoundItem as GridViewDataColumn; value = RadDataConverter.Instance.Parse(dataColumn, rtbValue1.Text); } this.advancedFilterDescriptor.Value = value; } } private void radBtnAdvanceApply_Click(object sender, EventArgs e) { this.gridView.EndEdit(); GridTableElement tableElement = this.gridView.TableElement; MasterGridViewTemplate masterTemplate = this.gridView.MasterTemplate; tableElement.BeginUpdate(); this.gridView.EnableCustomFiltering = false; masterTemplate.DataView.Refresh(); tableElement.EndUpdate(false); foreach (GridViewRowInfo row in this.gridView.Rows) { foreach (GridViewCellInfo cell in row.Cells) { cell.Style.Reset(); } } this.gridView.FilterDescriptors.BeginUpdate(); this.gridView.FilterDescriptors.Clear(); FilterDescriptor descriptor = this.advancedFilterDescriptor.Clone() as FilterDescriptor; this.gridView.FilterDescriptors.Add(descriptor); this.gridView.FilterDescriptors.EndUpdate(); } private void radTextBoxSearch_TextChanged(object sender, EventArgs e) { this.gridView.EndEdit(); GridTableElement tableElement = this.gridView.TableElement; MasterGridViewTemplate masterTemplate = this.gridView.MasterTemplate; tableElement.BeginUpdate(); this.gridView.FilterDescriptors.Clear(); this.gridView.EnableCustomFiltering = true; masterTemplate.DataView.Refresh(); tableElement.EndUpdate(false); GridViewEventInfo viewChangedEventInfo = new GridViewEventInfo(KnownEvents.ViewChanged, GridEventType.UI, GridEventDispatchMode.Send); DataViewChangedEventArgs args = new DataViewChangedEventArgs(ViewChangedAction.FilteringChanged); GridViewEvent viewChangedEvent = new GridViewEvent(masterTemplate, masterTemplate.DataView, new object[] { args }, viewChangedEventInfo); this.gridView.MasterTemplate.SynchronizationService.DispatchEvent(viewChangedEvent); this.gridView.TableElement.Update(GridUINotifyAction.StateChanged); } void GridView_CustomFiltering(object sender, GridViewCustomFilteringEventArgs e) { string searchPattern = this.radTextBoxSearch.Text; bool isEmptyPattern = String.IsNullOrEmpty(searchPattern); e.Visible = isEmptyPattern; foreach (GridViewCellInfo cell in e.Row.Cells) { string value = String.Empty; object cellValue = cell.Value; if (cellValue != null && !Convert.IsDBNull(cellValue)) { value = Convert.ToString(cellValue); } bool contains = false; if (!isEmptyPattern) { contains = value.Contains(searchPattern); e.Visible |= contains; } if (contains) { cell.Style.CustomizeFill = true; cell.Style.BackColor = Color.FromArgb(201, 252, 254); } else { cell.Style.Reset(); } } } #endregion }}Hope that helps
Richard