Telerik RadFilter - 如何以编程方式从Radfilter中删除和表达?

时间:2013-09-04 12:50:46

标签: telerik telerik-grid

我有一个要求,我需要以编程方式从RadFilter中删除表达式。 我的RadFilter绑定到RadGrid,用户可以选择从网格中删除列。

当删除列时,我需要遍历RadFilter中的所有表达式并删除在此列上定义的表达式。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

我终于明白了如何使这项工作。 Telerik控件是黑洞,如果你想要实现更复杂的功能而不是坚持他们拥有的演示场景,那么就没有很多文档。我希望这有助于某人。

public void YourMethod()
{
    //rfReport is RadFilter control defined somewhere on  your aspx page
    //fieldName is GridColumns's DataField property whose expression you want to
    //remove from RadFilter
    RemoveFilterExpressions(rfReport.RootGroup, string fieldName);
}

private void RemoveFilterExpressions(RadFilterGroupExpression filterGroupExpression, string fieldName)
{
    for (int i = filterGroupExpression.Expressions.Count - 1; i >= 0; i--)
    {
        var exp = filterGroupExpression.Expressions[i];
        if (exp.FilterFunction == RadFilterFunction.Group)
        {
            RemoveFilterExpressions(exp as RadFilterGroupExpression, fieldName);
            //Remove the filterGroupExpression if it has No expressions
            if (((RadFilterGroupExpression)exp).Expressions.Count == 0)
            {
                filterGroupExpression.Expressions.Remove(exp);
            }
        }
        else 
        {
            if (((RadFilterNonGroupExpression)exp).FieldName == fieldName)
            { 
                //Remove expression if FieldName == fieldName
                filterGroupExpression.Expressions.Remove(exp);
            }
        }
    }
}