我正在使用 Telerik RadGrid,并在某些列上设置了自定义过滤器。 作为该自定义过滤器(只是一个文本框)的一部分,我还有一个按钮,单击该按钮后我只想清除该特定列的过滤器值。
我让按钮正常工作,并将特定列的过滤器设置为空字符串,然后重新绑定(bind)网格,但这不会删除过滤器值。
似乎只修改 grid.MasterTableView.FilterExpression 实际上会影响过滤器,但我怎样才能从 FilterExpression 中只删除一列的过滤器值?
<telerik:RadTextBox ID="RdTxtC" EmptyMessage="Search" runat="server" EmptyMessageStyle-Font-Italic="true"
CssClass="padtop4" HoveredStyle-Font-Italic="true" ClientEvents-OnKeyPress="filterC"
InputType="Text" Width="80%">
</telerik:RadTextBox>
<asp:Button ID="ibtnClearFilterTown" ClientIDMode="Static" runat="server" CssClass="clearFilterButton" OnClick="ibtnClearFilterTown_Click"/>
在代码隐藏中:
protected void ibtnClearFilterTown_Click(object sender, EventArgs e)
{
RgClientList.MasterTableView.GetColumnSafe("TownCity").CurrentFilterValue = String.Empty;
RgClientList.Rebind();
}
删除单个列的过滤器似乎是一个相当简单的要求,所以我想我一定遗漏了一些明显的东西 - 任何帮助表示赞赏....
最佳答案
继续尝试这个而不是你的代码中的东西:
protected void ibtnClearFilterTown_Click(object sender, EventArgs e)
{
RgClientList.MasterTableView.GetColumnSafe("TownCity").CurrentFilterFunction = GridKnownFunction.NoFilter;
RgClientList.MasterTableView.GetColumnSafe("TownCity").CurrentFilterValue = String.Empty;
RgClientList.Rebind();
}
此外,根据 this question asked on SO ,您可能需要更改 Radgrid 上的以下属性:
EnableLinqExpressions="False"
编辑 1:(将其放入按钮中)
我知道这看起来很像做你想做的事,但我检查了 Telerik 的文档,没有看到一种简单的方法来简单地从 MasterTableView.FilterExpression 中删除一个过滤器字符串。这主要是由于每列将其筛选器存储为文本的方式,而不是将值存储到最终筛选器字符串中。
我将引导您完成以下涉及的步骤:
- 它从每一列创建一个过滤器集合,删除您不想要的过滤器 (columnwhosfiltylouwantremoved),然后循环遍历各列并清除您希望设置的列 = ""
然后它将网格的过滤器设置为其新值,然后重新绑定(bind)。
String MasterFilterExp = ""; var tempCollection = (from String sFilt in RadGrid1.MasterTableView.FilterExpression.Split(new string[] {"AND"},StringSplitOptions.None) where sFilt.Contains("[columnnameoffilteryouwantremoved]") != true select sFilt).ToArray(); MasterFilterExp = string.Join(" AND ", tempCollection); foreach (GridColumn column in RadGrid1.MasterTableView.Columns) { if (column.UniqueName == "columnnameoffilteryouwantremoved") { column.CurrentFilterFunction = GridKnownFunction.NoFilter; column.CurrentFilterValue = String.Empty; } } RadGrid1.MasterTableView.FilterExpression = MasterFilterExp; RadGrid1.Rebind();
它可能可以简化,但如果您有任何问题,请告诉我。我对其进行了测试,能够从网格中删除列的筛选器并重新绑定(bind)以显示更新后的信息。
关于c# - 删除单个 RadGrid 列的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12919167/