Hi, I've got issues with getting data from RuleModel class when "between" operator is used.
I use code below to get data from "value" field. Value is dynamic, so I was thinking that casting it to IEnumerable and then reading all values provided in between range will work - but it won't. Instead I get error of invalid casting - can't cast double to IEnumerable or can't cast data to IEnumerbale.
Code below works perfect for single input values.
How it is possible to read that range as 2 different values?
async Task FilterWasChosen()
{
filtersModels = new List<FilterModel>();
if (queryBuilder.GetValidRules().Rules.Count > 0)
{
foreach (var rule in queryBuilder.GetRules().Rules)
{
filtersModels.Add(new FilterModel()
{
condition = "and",
field = rule.Field.ToString(),
filterOperator = rule.Operator.ToString(),
value = rule.Value
});
}
}
await Filter();
}
Hi Szymon,
We have prepared a sample code based on your requirement. Please refer the below code snippet.
[Index.Razor]:
|
@using Syncfusion.Blazor @using Syncfusion.Blazor.QueryBuilder @using Syncfusion.Blazor.Buttons
<SfQueryBuilder TValue="EmployeeDetails" @ref="QueryBuilderObj"> <QueryBuilderColumns> <QueryBuilderColumn Field="EmployeeID" Label="Employee ID" Type="ColumnType.Number"></QueryBuilderColumn> <QueryBuilderColumn Field="FirstName" Label="First Name" Type="ColumnType.String"></QueryBuilderColumn> <QueryBuilderColumn Field="TitleOfCourtesy" Label="Title of Courtesy" Type="ColumnType.Boolean" Values="Values"></QueryBuilderColumn> <QueryBuilderColumn Field="Title" Label="Title" Type="ColumnType.String"></QueryBuilderColumn> <QueryBuilderColumn Field="HireDate" Label="Hire Date" Type="ColumnType.Date"></QueryBuilderColumn> <QueryBuilderColumn Field="Country" Label="Country" Type="ColumnType.String"></QueryBuilderColumn> <QueryBuilderColumn Field="City" Label="City" Type="ColumnType.String"></QueryBuilderColumn> </QueryBuilderColumns> </SfQueryBuilder>
<SfButton @onclick="onFilter">Filter</SfButton>
@code { SfQueryBuilder<EmployeeDetails> QueryBuilderObj; private bool[] Values = new bool[] { true, false }; public class EmployeeDetails { public int EmployeeID { get; set; } public string FirstName { get; set; } public bool TitleOfCourtesy { get; set; } public string Title { get; set; } public DateTime HireDate { get; set; } public string Country { get; set; } public string City { get; set; } }
public class FilterModel { public string condition { get; set; } public string field { get; set; } public string filterOperator { get; set; } public dynamic value { get; set; } }
private void onFilter() { var d = QueryBuilderObj.GetGroup(); var filtersModels = new List<FilterModel>(); if (QueryBuilderObj.GetValidRules().Rules.Count > 0) { foreach (var rule in QueryBuilderObj.GetRules().Rules) { filtersModels.Add(new FilterModel() { condition = "and", field = rule.Field.ToString(), filterOperator = rule.Operator.ToString(), value = rule.Value }); } } } } |
Could you please check with above code and get back to us, if you need any further assistance on this.
Regards,
YuvanShankar A