QueryBuilderTemplates SfMultiSelect

Good morning

I want one of the columns to be a list of checkboxes, so I've used `multiSelect`, but I get a runtime error when I select one of the checkboxes. The image is below.


I don't know if you have any examples.


Error: 

blazor.web.hwaxidwiwj.js:1 crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]

      Unhandled exception rendering component: NoImplicitConv

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: NoImplicitConv

   at System.Object.CallSite.Target(Closure , CallSite , Object )

   at System.Dynamic.UpdateDelegates.UpdateAndExecute1[Object,Nullable`1](CallSite site, Object arg0)

   at Syncfusion.Blazor.QueryBuilder.Internal.QueryBuilderRules`1[[Shared.Alarms.Alarm, Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].SetOperator()

   at Syncfusion.Blazor.QueryBuilder.Internal.QueryBuilderRules`1.<OnParametersSetAsync>d__128[[Shared.Alarms.Alarm, Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()

   at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)

_r @ blazor.web.hwaxidwiwj.js:1

blazor.web.hwaxidwiwj.js:1 crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]

      Unhandled exception rendering component: NoImplicitConv

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: NoImplicitConv

   at System.Object.CallSite.Target(Closure , CallSite , Object )

   at Syncfusion.Blazor.QueryBuilder.Internal.QueryBuilderRules`1[[Shared.Alarms.Alarm, Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].SetOperator()

   at Syncfusion.Blazor.QueryBuilder.Internal.QueryBuilderRules`1.<OnParametersSetAsync>d__128[[Shared.Alarms.Alarm, Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()

   at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)


Scheduled

<SfQueryBuilder TValue="Alarm" @ref="QueryBuilderAlarmsRef">

    <QueryBuilderColumns>

        <QueryBuilderColumn Field="DateTime" Label="@Lang.T("AlarmDate")" Type="Syncfusion.Blazor.QueryBuilder.ColumnType.Date" Format="yyyy-MM-dd HH:mm:ss"></QueryBuilderColumn>

        <QueryBuilderColumn Field="Num" Label="@Lang.T("AlarmNum")" Type="Syncfusion.Blazor.QueryBuilder.ColumnType.Number"></QueryBuilderColumn>

        <QueryBuilderColumn Field="Status" Label="@Lang.T("AlarmStatus")" Type="Syncfusion.Blazor.QueryBuilder.ColumnType.String"></QueryBuilderColumn>

          <QueryBuilderColumn Field="AlarmGroup" Label="@Lang.T("AlarmGroup")" Type=Syncfusion.Blazor.QueryBuilder.ColumnType.Number>

           <QueryBuilderTemplates>

               <ValueTemplate Context="ruleModel">

                   <SfMultiSelect TValue="int[]" TItem="AlarmGroup"

                                  DataSource="@alarmGroups"

                                  Value="@GetRuleIntArray(ruleModel)"

                                  ValueChanged="@(v => OnAlarmsGroupChanged(v, ruleModel))"

                                  Mode="VisualMode.CheckBox"

                                  ShowSelectAll="true"

                                  Placeholder="@Lang.T("AlarmGroup")">

                       <MultiSelectFieldSettings Text="Name" Value="Id"></MultiSelectFieldSettings>

                   </SfMultiSelect>

               </ValueTemplate>

           </QueryBuilderTemplates>

       </QueryBuilderColumn>

    </QueryBuilderColumns>

</SfQueryBuilder>

Image_9579_1777552307637

public record AlarmGroup

{

    public int Id { get; set; }

    public string Name { get; set; } = "";

}

private int[] GetRuleIntArray(RuleModel rule)

{

    if (rule.Value is string s && !string.IsNullOrEmpty(s))

        return s.Split(',', StringSplitOptions.RemoveEmptyEntries)

                .Select(x => int.TryParse(x.Trim(), out var n) ? n : -1)

                .Where(n => n >= 0)

                .ToArray();

    return Array.Empty<int>();

}


private void OnAlarmsGroupChanged(int[] values, RuleModel rule)

{

    selectedAlarmsGroups = values;

    rule.Value = values.Length > 0 ? string.Join(",", values) : string.Empty;

}


1 Reply

PK Priyanka Karthikeyan Syncfusion Team May 4, 2026 10:32 AM UTC

Hi Ainhoa Erkizia,
Thank you for reaching out. The issue is a type mismatch between what the QueryBuilder expects and what your MultiSelect is providing.
The problem:
  • Your QueryBuilderColumn is defined as ColumnType.Number (single value)
  • Your MultiSelect returns an int[] array
  • When the QueryBuilder tries to set the operator, it can't implicitly convert the array to a single number value
Solution
Change the column type from Number to String:
@page "/"
@using Syncfusion.Blazor
@using Syncfusion.Blazor.QueryBuilder
@using Syncfusion.Blazor.DropDowns

<h3>QueryBuilder with MultiSelect CheckBox</h3>

<SfQueryBuilder TValue="Alarm" @ref="QueryBuilderRef">
    <QueryBuilderColumns>
        <QueryBuilderColumn Field="DateTime" Label="Date" Type="Syncfusion.Blazor.QueryBuilder.ColumnType.Date" Format="yyyy-MM-dd HH:mm:ss"></QueryBuilderColumn>
        <QueryBuilderColumn Field="Num" Label="Number" Type="Syncfusion.Blazor.QueryBuilder.ColumnType.Number"></QueryBuilderColumn>
        <QueryBuilderColumn Field="Status" Label="Status" Type="Syncfusion.Blazor.QueryBuilder.ColumnType.String"></QueryBuilderColumn>
        <QueryBuilderColumn Field="AlarmGroup" Label="Alarm Group" Type="Syncfusion.Blazor.QueryBuilder.ColumnType.String">
            <QueryBuilderTemplates>
                <ValueTemplate Context="ruleModel">
                    <SfMultiSelect TValue="int[]" TItem="AlarmGroup"
                                   DataSource="@alarmGroups"
                                   Value="@GetRuleIntArray(ruleModel)"
                                   ValueChanged="@(v => OnAlarmsGroupChanged(v, ruleModel))"
                                   Mode="VisualMode.CheckBox"
                                   ShowSelectAll="true"
                                   Placeholder="Select Alarm Groups">
                        <MultiSelectFieldSettings Text="Name" Value="Id"></MultiSelectFieldSettings>
                    </SfMultiSelect>
                </ValueTemplate>
            </QueryBuilderTemplates>
        </QueryBuilderColumn>
    </QueryBuilderColumns>
</SfQueryBuilder>



@code {
    SfQueryBuilder<Alarm>? QueryBuilderRef;

    private List<AlarmGroup> alarmGroups = new()
    {
        new AlarmGroup { Id = 1, Name = "Critical" },
        new AlarmGroup { Id = 2, Name = "Warning" },
        new AlarmGroup { Id = 3, Name = "Info" },
        new AlarmGroup { Id = 4, Name = "Debug" }
    };

    private int[] GetRuleIntArray(RuleModel rule)
    {
        if (rule.Value is string s && !string.IsNullOrEmpty(s))
            return s.Split(',', StringSplitOptions.RemoveEmptyEntries)
                    .Select(x => int.TryParse(x.Trim(), out var n) ? n : -1)
                    .Where(n => n >= 0)
                    .ToArray();
        return Array.Empty<int>();
    }

    private void OnAlarmsGroupChanged(int[] values, RuleModel rule)
    {
        rule.Value = (values != null && values.Length > 0)
            ? string.Join(",", values)
            : string.Empty;
        Console.WriteLine($"Selected: {rule.Value}");
    }
}


Why this works:
  • Your value is stored as a comma-separated string ("1,2,3") in rule.Value
  • ColumnType.String properly handles string values without attempting type conversion
  • The MultiSelect renders and updates correctly without the QueryBuilder's internal type validation throwing errors
Your existing helper methods (GetRuleIntArray and OnAlarmsGroupChanged) will continue to work as-is since they already handle the string ↔ int[] conversion.

Regards,
Priyanka K

Loader.
Up arrow icon