This is a great control, but I need some additional customization and events or properties of the event arguments.
I would like to be able to disable or hide the Group Operator button until more than one expression is added to reduce end user confusion.
As for the events, I need to be able to automatically add an expression when a new group is created, but I cannot find a way to grab the group that was just created using the ItemCommand event.
It would also be nice to be able to somehow bind an expression to a datasource or provide a valid list of options for users to select from. This would be specifically useful where a field requires a code that is not understood by end users where we could give a description of that code instead of the code.
Are any of these currently possible and/or are they possibly future features?
13 Answers, 1 is accepted
To your questions:
- You can hide Add Group button in two ways
/using style/
<style type="text/css">          li ul li div a.rfAddGr          {              display: none;          }  </style>/from code behind/
protected void RadFilter1_PreRender(object sender, EventArgs e)      {          foreach (var item in RadFilter1.RootGroupItem.ChildItems)          {              if (item is RadFilterGroupExpressionItem)              {                  var group = (RadFilterGroupExpressionItem)item;                                  ControlsOfType<LinkButton>(group, button => button.CommandName == RadFilter.AddGroupCommandName).First().Visible = false;              }          }      }          public IEnumerable<T> ControlsOfType<T>(Control parent, Predicate<T> where) where T : class    {          foreach (Control control in parent.Controls)          {              if (control is T)              {                  var result = control as T;                  if (where(result))                  {                      yield return result;                      continue;                  }              }                  foreach (T descendant in ControlsOfType<T>(control, where))              {                  yield return descendant;              }          }      }Both approaches above allows you to nest group items only in root group.
- to achieve this you can cancel creation of the group item and build items you desire. For example:
protected void RadFilter_ItemCommand(object sender,  RadFilterCommandEventArgs args) {         if (args.CommandName == RadFilter.AddGroupCommandName)     {         args.Canceled = true;         RadFilterGroupExpression group = new RadFilterGroupExpression();         ((RadFilterGroupExpressionItem)args.ExpressionItem).Expression.AddExpression(group);         RadFilterEqualToFilterExpression<string> expression = new RadFilterEqualToFilterExpression<string>(RadFilter1.FieldEditors[0].FieldName);         group.AddExpression(expression);         RadFilter1.RecreateControl();     } }- you can find attached example how to implement RadComboBox in RadFilter editor.
Best wishes,
Nikolay
the Telerik team

The group creation part worked well and I have yet to try the combobox example.
I am having trouble hiding the group boxes using code behind. We use VB in our current project so maybe something got lost in my conversion. Here is the code for VB. Please let me know if I am missing something, it errors out at some point on the nested For Loop in the ControlsOfType function.
Public Sub FilterGroupsVisible(ByRef ActiveRadFilter As RadFilter)     For Each oItem In ActiveRadFilter.RootGroupItem.ChildItems         If TypeOf oItem Is RadFilterGroupExpressionItem Then            Dim oGroup As RadFilterGroupExpressionItem = CType(oItem, RadFilterGroupExpressionItem)             ControlsOfType(Of LinkButton)(oGroup, Function(button) button.CommandName = RadFilter.AddGroupCommandName).First().Visible = False        End If    NextEnd SubPrivate Function ControlsOfType(Of T As Class)(ByVal parent As Control, ByVal where As Predicate(Of T)) As IEnumerable(Of T)     For Each control As Control In parent.Controls         If TypeOf control Is T Then            Dim result = TryCast(control, T)             If where(result) Then                Return result                 Continue For            End If        End If        For Each descendant As T In ControlsOfType(Of T)(control, where)             Return descendant         Next    NextEnd Function
The example for the combo box works, but how can I apply it to a grid where the field already exists?  I tried to put the editor assignment in the FieldEditorCreated event of the Filter object but it doesn't seem to work.  
Protected Sub rfAdvancedDomestic_FieldEditorCreated(ByVal sender As Object, ByVal e As Telerik.Web.UI.RadFilterFieldEditorCreatedEventArgs) Handles rfAdvancedDomestic.FieldEditorCreated     If e.Editor.FieldName = "StatusStage" Then        Dim oEditor As New RadFilterDropDownEditor         e.Editor = oEditor         oEditor.DataTextField = "StatusGroupDesc"        oEditor.DataValueField = "StatusGroupCode"        oEditor.FieldName = "StatusStage"        oEditor.DataType = GetType(String)         oEditor.DisplayName = "Status Group"        oEditor.DataSourceID = "sdsStatusGroups"    End IfEnd SubI suspect the conversion fails due to missing yield keyword in VB.NET. The algorithm is quite simple - iterates through Controls collection of given Control, checks whether current control is LinkButton with CommandName RadFilter.AddGroupCommandName and set visibility. Regarding your second post: I am afraid that when using integration with RadGrid, RadFilter will automatically create editors per/grid column and they cannot be changed. You can programmatically populate RadFilter.FieldEditors collection and manually handle apply command and apply expressions on RadGrid.
Greetings,
Nikolay
the Telerik team

Can you provide a sample on how I can manually populate the FieldEditors for the RadFilter?  I attempted to do it but I get an error message when I try to add an expression: 
System.ArgumentException: Parameter cannot be null or empty.
Parameter name: fieldName
I am populating the fieldName property as such:
Dim oRegFilter As New RadFilterTextFieldEditor
oRegFilter.FieldName = "B"
oRegFilter.DataType = GetType(String)
rfAdvancedDomestic.FieldEditors.Add(oRegFilter)
A sample would be nice as there is currently no documentation on server side code for this control that I could find on your site.
Can you check out the attached sample illustrating how you can add dynamica field editors and expression to RadFilter and see if this works for you. There is also shown how you can handle the ApplyExpression event.
Kind regards,
Iana
the Telerik team

    Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender         SetOperatorButtonVisible(_RadFilter.RootGroupItem)     End Sub'''     Public Sub SetOperatorButtonVisible(ByRef GroupItem As RadFilterGroupExpressionItem)         For Each oControl In GroupItem.Controls             Dim oHyperLink As HyperLink = GetControlOfType(oControl, GetType(HyperLink))             If oHyperLink IsNot Nothing Then                If oHyperLink.Text.ToUpper = "AND" Then                    oHyperLink.Visible = GroupItem.ChildItems.Count > 1                 End If            End If              Dim oLinkButton As LinkButton = GetControlOfType(oControl, GetType(LinkButton))             If oLinkButton IsNot Nothing Then                If oLinkButton.Text.ToUpper = "ADD EXPRESSION" Then                    oLinkButton.Text = "Add Row"                    oLinkButton.ToolTip = "Add Row"                End If            End If        Next          For Each oChildItem In GroupItem.ChildItems             If TypeOf (oChildItem) Is RadFilterGroupExpressionItem Then                Dim oGroup As RadFilterGroupExpressionItem = CType(oChildItem, RadFilterGroupExpressionItem)                 SetOperatorButtonVisible(oChildItem)             End If        Next    End Sub'''     Public Function GetControlOfType(ByVal ParentControl As Control, ByVal TypeOfControl As Type) As Control         Dim oLinkButton As Control = Nothing          For Each oSubControl As Control In ParentControl.Controls             If oLinkButton Is Nothing Then                If oSubControl.GetType Is TypeOfControl Then                    oLinkButton = oSubControl                 Else                    oLinkButton = GetControlOfType(oSubControl, TypeOfControl)                 End If            End If        Next          Return oLinkButton     End Function
Is there a sample code available?
Thanks a bunch.
Joey
One way to hide the "Add group" button is to add the below style to your page:
<style type="text/css"> .RadFilter_[SkinName] .rfAddGr  {     display:none; } </style>Another approach is to use server-side code in the RadFilter PreRender event:
protected void RadFilter1_PreRender(object sender, EventArgs e) {     RadFilter1.RootGroupItem.Controls[2].Controls[1].Visible = false; }All the best,
Iana
the Telerik team
Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.

Thanks!
Joey

protected void RadFilter1_PreRender(object sender, EventArgs e) {     RadFilter1.RootGroupItem.Controls[2].Controls[1].Visible = false; }But doesnt work for me.
Said that this controls doesnt exist
Try modifying it like this:
protected void RadFilter1_PreRender(object sender, EventArgs e){    RadFilter1.RootGroupItem.Controls[0].Controls[2].Controls[1].Visible = false;}Regards,
Iana
the Telerik team
Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!

$(".rfAddGr").css("display", "none");For some reason I wasn't able to get the CSS working with the mixture of master pages and content pages. And when I tried to use the code behind option there was something in my code that caused the group to hide and then reappear.
I like this option best. It's cleaner, client side, and can be applied on a content page-by-content page basis.