AddFilter Method


Adds a new filter at the end of the list.

Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 24.0.0.0 (24.0.0.0)
Since:  2013

Syntax

C#
public void AddFilter(
	ScheduleFilter filter
)
Visual Basic
Public Sub AddFilter ( _
	filter As ScheduleFilter _
)
Visual C++
public:
void AddFilter(
	ScheduleFilter^ filter
)

Parameters

filter
Type: Autodesk.Revit.DBScheduleFilter
The filter to add.

Examples

CopyC#
public static void AddFilterToSchedule(ViewSchedule schedule, ElementId levelId)
{
    // Find level field
    ScheduleDefinition definition = schedule.Definition;

    ScheduleField levelField = FindField(schedule, BuiltInParameter.ROOM_LEVEL_ID);

    // Add filter
    using (Transaction t = new Transaction(schedule.Document, "Add filter"))
    {
        t.Start();

        // If field not present, add it
        if (levelField == null)
        {
            levelField = definition.AddField(ScheduleFieldType.Instance, new ElementId(BuiltInParameter.ROOM_LEVEL_ID));
        }

        // Set field to hidden
        levelField.IsHidden = true;
        ScheduleFilter filter = new ScheduleFilter(levelField.FieldId, ScheduleFilterType.Equal, levelId);
        definition.AddFilter(filter);

        t.Commit();
    }
}

/// <summary>
/// Finds an existing ScheduleField matching the given parameter
/// </summary>
/// <param name="schedule"></param>
/// <param name="paramEnum"></param>
/// <returns></returns>
public static ScheduleField FindField(ViewSchedule schedule, BuiltInParameter paramEnum)
{
    ScheduleDefinition definition = schedule.Definition;
    ScheduleField foundField = null;
    ElementId paramId = new ElementId(paramEnum);

    foreach (ScheduleFieldId fieldId in definition.GetFieldOrder())
    {
        foundField = definition.GetField(fieldId);
        if (foundField.ParameterId == paramId)
        {
            return foundField;
        }
    }

    return null;
}
CopyVB.NET
Public Shared Sub AddFilterToSchedule(schedule As ViewSchedule, levelId As ElementId)
    ' Find level field
    Dim definition As ScheduleDefinition = schedule.Definition

    Dim levelField As ScheduleField = FindField(schedule, BuiltInParameter.ROOM_LEVEL_ID)

    ' Add filter
    Using t As New Transaction(schedule.Document, "Add filter")
        t.Start()

        ' If field not present, add it
        If levelField Is Nothing Then
            levelField = definition.AddField(ScheduleFieldType.Instance, New ElementId(BuiltInParameter.ROOM_LEVEL_ID))
        End If

        ' Set field to hidden
        levelField.IsHidden = True
        Dim filter As New ScheduleFilter(levelField.FieldId, ScheduleFilterType.Equal, levelId)
        definition.AddFilter(filter)

        t.Commit()
    End Using
End Sub

' <summary>
' Finds an existing ScheduleField matching the given parameter
' </summary>
' <param name="schedule"></param>
' <param name="paramEnum"></param>
' <returns></returns>
Public Shared Function FindField(schedule As ViewSchedule, paramEnum As BuiltInParameter) As ScheduleField
    Dim definition As ScheduleDefinition = schedule.Definition
    Dim foundField As ScheduleField = Nothing
    Dim paramId As New ElementId(paramEnum)

    For Each fieldId As ScheduleFieldId In definition.GetFieldOrder()
        foundField = definition.GetField(fieldId)
        If foundField.ParameterId = paramId Then
            Return foundField
        End If
    Next

    Return Nothing
End Function

Exceptions

ExceptionCondition
Autodesk.Revit.ExceptionsArgumentException The field ID is not the ID of a field in this ScheduleDefinition. -or- The field and filter type cannot be used to filter this ScheduleDefinition. -or- The filter value is not valid for the field and filter type.
Autodesk.Revit.ExceptionsArgumentNullException A non-optional argument was null
Autodesk.Revit.ExceptionsInvalidOperationException This ScheduleDefinition does not support filters. -or- The resulting filter count would be greater than 8.

See Also

ArchiLabs

Stop fighting Revit automation.

Build repeatable BIM design and documentation workflows with scripts, data, and AI in one place, without wrestling brittle one-off automations.

Try ArchiLabs →