AUTHOR: Marin Bratanov
DATE POSTED: December 06, 2017
Clear RadGrid filters programmatically (e.g., on a click of a button).
You need to do a few steps:
For example:
//clear filters
protected
void
RadButton_ClearAllFilters_Click(
object
sender, EventArgs e)
{
foreach
(GridColumn column
in
RadGrid1.MasterTableView.Columns)
column.ListOfFilterValues =
null
;
// CheckList values set to null will uncheck all the checkboxes
column.CurrentFilterFunction = GridKnownFunction.NoFilter;
column.CurrentFilterValue =
string
.Empty; column.AndCurrentFilterFunction = GridKnownFunction.NoFilter;
column.AndCurrentFilterFunction = GridKnownFunction.NoFilter;
column.AndCurrentFilterValue =
.Empty;
}
RadGrid1.MasterTableView.FilterExpression =
RadGrid1.MasterTableView.Rebind();
//data binding
private
class
DataRowComparer : IEqualityComparer<DataRow>
dataField;
public
DataRowComparer(
dataField)
this
.dataField = dataField;
bool
Equals(DataRow x, DataRow y)
return
x[dataField].ToString() == y[dataField].ToString();
int
GetHashCode(DataRow dataRow)
dataRow[dataField].GetHashCode();
Page_Load(
RadGrid1_NeedDataSource(
sender, GridNeedDataSourceEventArgs e)
RadGrid1.DataSource = GetGridSource();
DataTable GetGridSource()
DataTable dataTable =
new
DataTable();
DataColumn column =
DataColumn();
column.DataType = Type.GetType(
"System.Int32"
);
column.ColumnName =
"OrderID"
dataTable.Columns.Add(column);
column =
"System.Decimal"
"Freight"
"System.String"
"ShipName"
"ShipCountry"
DataColumn[] PrimaryKeyColumns =
DataColumn[1];
PrimaryKeyColumns[0] = dataTable.Columns[
];
dataTable.PrimaryKey = PrimaryKeyColumns;
for
(
i = 0; i <= 80; i++)
DataRow row = dataTable.NewRow();
row[
] = i + 1;
] = (i + 1) + (i + 1) * 0.1 + (i + 1) * 0.01;
] =
"Name "
+ (i % 6 + 1);
"Country "
+ (i % 9 + 1);
dataTable.Rows.Add(row);
dataTable;
DataTable GetListBoxSource(
DataTable table = GetGridSource().Clone();
table.Rows.Clear();
GetGridSource().Rows.Cast<DataRow>().Distinct<DataRow>(
DataRowComparer(dataField))
.ToList().ForEach(x => table.ImportRow(x));
table;
RadGrid1_FilterCheckListItemsRequested(
sender, GridFilterCheckListItemsRequestedEventArgs e)
DataField = (e.Column
as
IGridDataColumn).GetActiveDataField();
e.ListBox.DataSource = GetListBoxSource(DataField);
e.ListBox.DataKeyField = DataField;
e.ListBox.DataTextField = DataField;
e.ListBox.DataValueField = DataField;
e.ListBox.DataBind();
RadGrid1_PreRender(
GridHeaderItem header = RadGrid1.MasterTableView.GetItems(GridItemType.Header)[0]
GridHeaderItem;
(GridColumn col
RadGrid1.MasterTableView.RenderColumns
.OfType<IGridDataColumn>().Where(x => x.AllowFiltering))
if
(!
.IsNullOrEmpty(col.EvaluateFilterExpression()))
TableCell cell = header[col.UniqueName];
cell.BackColor = System.Drawing.Color.Aqua;
cell.Style[
"background-image"
"none"
cell.Controls.Add(
Image()
ID =
"FilterIndicator"
+ col.UniqueName,
ImageUrl =
"~/arrowUp.png"
});
Markup:
<
telerik:RadButton
runat
=
"server"
ID
"RadButton1"
Text
"Clear Filters"
OnClick
"RadButton_ClearAllFilters_Click"
></
>
telerik:RadGrid
"RadGrid1"
AllowPaging
"True"
CellSpacing
"0"
GridLines
"None"
Width
"800px"
OnNeedDataSource
"RadGrid1_NeedDataSource"
AllowFilteringByColumn
"true"
FilterType
"HeaderContext"
EnableHeaderContextMenu
EnableHeaderContextFilterMenu
OnFilterCheckListItemsRequested
"RadGrid1_FilterCheckListItemsRequested"
OnPreRender
"RadGrid1_PreRender"
MasterTableView
AutoGenerateColumns
"False"
DataKeyNames
Columns
telerik:GridBoundColumn
DataField
DataType
FilterControlAltText
"Filter OrderID column"
HeaderText
ReadOnly
SortExpression
UniqueName
FilterCheckListEnableLoadOnDemand
</
telerik:GridNumericColumn
"Filter Freight column"
AllowFiltering
"false"
"Filter ShipName column"
"Filter ShipCountry column"
Resources Buy Try