2012-10-16 53 views
3

我正在使用Telerik RadGrid,並在某些列上設置了自定義過濾器。 作爲該自定義過濾器(這只是一個文本框)的一部分,我也有一個按鈕,單擊時,我想只清除該特定列的過濾器值。刪除單個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(); 
} 

這似乎是一個相當簡單的要求,取下過濾網單個列,所以我想我一定是失去了一些東西顯而易見的 - 任何幫助表示讚賞.. ..

+0

我平添了幾分(輕描淡寫),以我的回答如下。一探究竟。 – KreepN

回答

4

繼續前進,嘗試,而不是你在你的代碼,這是什麼:

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

大概可以簡化,但讓我知道如果您有任何問題。我測試了它,並能夠從網格中刪除一列的過濾器,並重新綁定以顯示更新的信息。

+0

我沒有EnableLinqExpressions所以添加了,但過濾器仍然不清楚。單獨的列過濾器清除,但MaterTableView。FilterExpression中仍然有TownCity過濾器的值。我想我需要從那裏刪除它 - 我可以;將其設置爲空字符串,因爲我仍然想保留其他列過濾器值... –

+0

哇!感謝你 - 我還沒有綁定它,但它看起來會完成這項工作。再次感謝。 –

0

你爲什麼不與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