C# 拆下单个RadGrid柱的过滤器
我正在使用Telerik RadGrid,并在一些列上设置了自定义过滤器。 作为自定义过滤器(只是一个文本框)的一部分,我还有一个按钮,单击该按钮时,我只想清除该特定列的过滤器值 我让按钮工作,并将特定列的筛选器设置为空字符串,然后重新绑定网格,但这不会删除筛选器值 似乎只有修改grid.MasterTableView.FilterExpression才会影响过滤器,但如何从FilterExpression中仅删除一列的过滤器值C# 拆下单个RadGrid柱的过滤器,c#,asp.net,asp.net-mvc,telerik,radgrid,C#,Asp.net,Asp.net Mvc,Telerik,Radgrid,我正在使用Telerik RadGrid,并在一些列上设置了自定义过滤器。 作为自定义过滤器(只是一个文本框)的一部分,我还有一个按钮,单击该按钮时,我只想清除该特定列的过滤器值 我让按钮工作,并将特定列的筛选器设置为空字符串,然后重新绑定网格,但这不会删除筛选器值 似乎只有修改grid.MasterTableView.FilterExpression才会影响过滤器,但如何从FilterExpression中仅删除一列的过滤器值 <telerik:RadTextBox ID="RdTxtC
<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").CurrentFilterFunction = GridKnownFunction.NoFilter;
RgClientList.MasterTableView.GetColumnSafe("TownCity").CurrentFilterValue = String.Empty;
RgClientList.Rebind();
}
此外,根据,您可能需要更改Radgrid上的以下属性:
EnableLinqExpressions="False"
编辑1:(将其放入按键) 我知道这看起来很难实现您的愿望,但我查看了Telerik的文档,没有找到一种简单的方法从MasterTableView.FilterExpression中删除一个筛选器字符串。这主要是由于每列将其筛选器存储为文本的方式,而不是最终筛选器字符串中的值 我将引导您完成以下步骤:
- 它从每一列创建一个筛选器集合,删除您不想要的筛选器(ColumnWhosFilteryYouwantMoved),然后在列中循环并清除您想要设置的列=“”
- 然后将网格的过滤器设置为其新值,然后重新绑定
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();
可能可以简化,但如果有任何问题,请告诉我。我对它进行了测试,能够从网格中删除列的过滤器,并重新绑定以显示更新的信息。为什么不使用JavaScript尝试一下呢:
function FilterMenuShowing(sender, eventArgs)
{
if (eventArgs.get_column().get_uniqueName() == "IsPostable")
{
var menu = eventArgs.get_menu();
var items = menu._itemData;
var i = 0;
while (i < items.length)
{
var item = menu._findItemByValue(items[i].value);
if (item != null)
item._element.style.display="none";
i++;
}
}
}
函数过滤器显示(发送方、事件参数)
{
if(eventArgs.get_column().get_uniqueName()=“IsPostable”)
{
var menu=eventArgs.get_menu();
变量项=菜单。\u项数据;
var i=0;
while(i
您可以看到详细信息我没有EnableLinqExpressions,因此添加了该选项,但过滤器仍然不清除。单个列筛选器不清除,但MatterTableView.FilterExpression中仍包含TownCity筛选器值。我想我需要从那里移除它——我可以;不要将其设置为空字符串,因为我仍然希望保留任何其他列筛选器值…哇!谢谢你-我还没有把它绑好,但是看起来它能完成任务。再次感谢。我在下面的回答中加了一点(轻描淡写)。过来看。
function FilterMenuShowing(sender, eventArgs)
{
if (eventArgs.get_column().get_uniqueName() == "IsPostable")
{
var menu = eventArgs.get_menu();
var items = menu._itemData;
var i = 0;
while (i < items.length)
{
var item = menu._findItemByValue(items[i].value);
if (item != null)
item._element.style.display="none";
i++;
}
}
}