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>
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;
}
- Your
QueryBuilderColumnis defined asColumnType.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
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}"); } } |
- Your value is stored as a comma-separated string (
"1,2,3") inrule.Value ColumnType.Stringproperly handles string values without attempting type conversion- The MultiSelect renders and updates correctly without the QueryBuilder's internal type validation throwing errors
GetRuleIntArray and OnAlarmsGroupChanged) will continue to work as-is since they already handle the string ↔ int[] conversion.- 1 Reply
- 2 Participants
-
AE Ainhoa Erkizia
- Apr 30, 2026 12:37 PM UTC
- May 4, 2026 10:32 AM UTC