【问题标题】:Remove the filter for a single RadGrid column删除单个 RadGrid 列的过滤器
【发布时间】:2012-10-06 19:36:00
【问题描述】:

我正在使用 Telerik RadGrid,并在某些列上设置了自定义过滤器。 作为该自定义过滤器(只是一个文本框)的一部分,我还有一个按钮,单击该按钮时,我只想清除该特定列的过滤器值。

我有按钮工作,并将特定列的过滤器设置为空字符串,然后重新绑定网格,但这不会删除过滤器值。

似乎只修改 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();
}

删除单个列的过滤器似乎是一个相当简单的要求,所以我认为我一定遗漏了一些明显的东西 - 感谢任何帮助......

【问题讨论】:

  • 我在下面的回答中添加了一点(轻描淡写)。看看吧。

标签: c# asp.net asp.net-mvc telerik radgrid


【解决方案1】:

试试这个,而不是你的代码:

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 中删除一个过滤器字符串。这主要是由于每列将其过滤器存储为文本的方式,而不是进入最终过滤器字符串的值。

我将引导您完成以下涉及的步骤:

  • 它从每一列创建一个过滤器集合,删除您不想要的过滤器(columnwhosfilteryouwantremoved),然后循环遍历列并清除您希望设置的列 = ""
  • 然后它将网格的过滤器设置为其新值,然后重新绑定。

    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();                        
    

它可能可以简化,但如果您有任何问题,请告诉我。我对其进行了测试,能够从网格中删除列的过滤器并重新绑定以显示更新的信息。

【讨论】:

  • 我没有 EnableLinqExpressions 所以添加了它,但过滤器仍然没有清除。单个列过滤器会清除,但 MaterTableView.FilterExpression 中仍然包含 TownCity 过滤器值。我想我需要以某种方式从那里删除它 - 我不能将它设置为空字符串,因为我仍然想保留任何其他列过滤器值...
  • 哇!谢谢你 - 我还没有把它绑起来,但看起来它可以完成这项工作。再次感谢。
【解决方案2】:

你为什么不用 Javacript 试试呢:

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++;     
           }
       }
 }

您可以查看详情here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多