7.0 Pre-assigned filter

With v.7, setting an initial custom filter no longer appears to work.

Similar to your example here: Blazor DataGrid Component - Filter API | Free UI Components by Radzen, I am attempting to assign a filter in OnAfterRenderAsync:

protected override async Task OnAfterRenderAsync(bool firstRender)
{

    if (firstRender)
    {
        RadzenDataGridColumn<AssetData>? column = grid.ColumnsCollection.FirstOrDefault(e => e.Property == "StatusString");
        if (column != null)
        {
            selectedStatuses = [Asset.Status.Available, Asset.Status.Assigned, Asset.Status.Loaned];

            string? whereExpression = FilterHelpers.GetWhereExpression("StatusString", selectedStatuses);
            column.SetCustomFilterExpression(whereExpression);
            column.SetFilterValue(selectedStatuses);
            column.SetFilterOperator(FilterOperator.Custom);
            await grid.Reload();

            filterCount += 1;
            isFiltered = true;
        }

        await base.OnAfterRenderAsync(firstRender);
    }
}

Outside the scope of this post, consider that I am converting bitwise Enum values into a string like this:
StatusString = "<Available><Assigned><Loaned><Donated>"

FilterHelpers.GetWhereExpression generates a string that can be compared against the string of Enum values (I really miss being able to do bitwise comparisons like you could in v.5).

Sample output from FilterHelpers.GetWhereExpression:
it.StatusString.Contains("<Available>") or it.StatusString.Contains("<Assigned>") or it.StatusString.Contains("<Loaned>")

This workaround for bitwise comparisons is proven to work. When I call it manually from within the FilterTemplate form, it works as intended.

                <RadzenDataGridColumn TItem="AssetData" FilterOperator="FilterOperator.Custom" LogicalFilterOperator="LogicalFilterOperator.Or" Property="StatusString" Title="Status" Width="100px">
                    <FilterTemplate Context="column">
                        <div class="rz-grid-filter">
                            <span class="rz-grid-filter-label">Filter</span>
                            <RadzenListBox @bind-Value="selectedStatuses" Data="@statuses" TextProperty="DisplayName" ValueProperty="Status" AllowClear="true" Multiple="true" Style="width:220px; height:230px;" />
                            <div class="rz-grid-filter-buttons" style="padding-top:10px; padding-bottom:0px;">
                                <RadzenButton ButtonStyle="ButtonStyle.Base" Variant="Variant.Text" Style="background-color: unset !important;" Text="Clear" Click="@(() => OnStatusFilterClear(column))" />
                                <RadzenButton ButtonStyle="ButtonStyle.Primary" Variant="Variant.Text" Text="Apply" Click="@(() => OnStatusFilter(column))" />
                            </div>
                        </div>
                    </FilterTemplate>
                    <Template>
                        @{
                            string icon = AssetService.GetAssetStatusIcon(context.Status);
                            string status = context.Status.GetDisplayDescription();
                        }
                        <span title="@status"><i class="@icon fa-lg"></i> @status</span>
                    </Template>
                </RadzenDataGridColumn>


    protected async Task OnStatusFilter(RadzenDataGridColumn<AssetData> column)
    {
        string? whereExpression = FilterHelpers.GetWhereExpression("StatusString", selectedStatuses);
        await column.SetCustomFilterExpressionAsync(whereExpression);
        await column.SetFilterValueAsync(selectedStatuses);
        await column.CloseFilter();
        filterCount += 1;
        isFiltered = (filterCount > 0);
    }

However, when the nearly identical code is called from OnAfterRenderAsync, it does not correctly apply the filter.

I was able to replicate and fix the problem - the fix will be part of our next update early next week.