3

Telerik RadGridを使用しており、一部の列にカスタムフィルターを設定しています。そのカスタムフィルター(単なるテキストボックス)の一部として、クリックしたときにその特定の列のフィルター値のみをクリアしたいボタンもあります。

ボタンが機能していて、特定の列のフィルターを空の文字列に設定してから、グリッドを再バインドしていますが、フィルター値は削除されません。

grid.MasterTableView.FilterExpressionを変更するだけで実際にフィルターに影響するようですが、FilterExpressionから1つの列のフィルター値だけを削除するにはどうすればよいですか?

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

単一の列のフィルターを削除することはかなり単純な要件のように思われるので、私は明らかな何かを見逃しているに違いないと思います-どんな助けでもありがたいです...。

4

2 に答える 2

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

}

また、SOで尋ねられたこの質問によると、Radgridの次のプロパティを変更する必要がある場合があります。

EnableLinqExpressions="False"

編集1:(これをボタンを押す)

これはあなたが望むことをするのに大変なことのように見えることを理解していますが、Telerikのドキュメントを確認したところ、MasterTableView.FilterExpressionから1つのフィルター文字列を削除する簡単な方法がわかりませんでした。これは主に、各列がフィルターをテキストとして格納する方法によるものであり、最終的なフィルター文字列に入る値ではありません。

以下の手順を説明します。

  • 各列からフィルターのコレクションを作成し、不要なフィルター(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();                        
    

おそらく簡略化できますが、ご不明な点がありましたらお知らせください。私はそれをテストし、グリッドから列のフィルターを削除し、更新された情報を表示するために再バインドすることができました。

于 2012-10-16T18:29:53.243 に答える
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++;     
           }
       }
 }

あなたはここで詳細を見ることができます

于 2014-02-11T08:19:51.537 に答える