0

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

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

4

1 回答 1

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);
            }
        }
    }
}
于 2013-12-09T16:18:28.487 回答