компонент Syncfusion дает исключение Value cannot be null. (Parameter 'type')
Я использую syncfusion в моем приложении blazor web assembly
<SfGrid @ref="Grid" DataSource="@IEnumerable<MissionListModel> garajModel;" Height="550" AllowReordering="true" AllowFiltering="true" AllowPaging="true" AllowSorting="true">
<GridEvents TValue="MissionListModel" RowDataBound="RowBound"></GridEvents>
<GridPageSettings PageSize="15"></GridPageSettings>
<GridFilterSettings Type="Syncfusion.Blazor.Grids.FilterType.CheckBox" Mode="FilterBarMode.Immediate" ImmediateModeDelay="300"></GridFilterSettings>
<GridColumns>
<GridColumn Field=@nameof(GarajListModel.champs1) HeaderText="champs1" Width="120" Type=ColumnType.String
FilterSettings="@(new FilterSettings{ Operator = Operator.Contains })">
</GridColumn>
<GridColumn Field=@nameof(GarajListModel.champs2) HeaderText="champs2" Width="100"></GridColumn>
<GridColumn Field=@nameof(GarajListModel.champs3) HeaderText="champs3" Type=ColumnType.String Width="120" DisableHtmlEncode="false"></GridColumn>
</GridColumns>
</SfGrid>
public void RowBound(RowDataBoundEventArgs<MissionListModel> args)
{
if (условие)
{
args.Row.AddClass(new string[] { "класс css" }); //окрашиваю строку
}
else
{
if (условие)
{
окрашиваю строку в др цвет
}
else
{
args.Row.AddClass(new string[] { "transpRow" }); // на всякий случай сбрасываю цвета
}
}
this.StateHasChanged();
}
данные в таблице появляются из мульти-фильтра с другой страницы
<SfMultiSelect TValue="string[]" TItem="ModelGaraj" Placeholder=@myLocalizer["ViberiteGaraj(i)"] DataSource="@List<ModelGaraj> listGarajey">
<MultiSelectFieldSettings Text="imya_garaja" Value="code_garaja" />
<MultiSelectEvents TItem="ModelGaraj" TValue="string[]" OnValueSelect="OnSelect" />
</SfMultiSelect>
public void OnSelect(Syncfusion.Blazor.DropDowns.SelectEventArgs<ModelGaraj> args)
{
var selectedValue = args.ItemData;
if (selectedValue != null)
{
try
{
ObshiyListGarajeyDlyaPokaza.Add(selectedValue);
}
catch (Exception Ex)
{
string exMsg = Ex.Message;
}
}
}
Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: Value cannot be null. (Parameter 'type')
System.ArgumentNullException: Value cannot be null. (Parameter 'type')
at System.Dynamic.Utils.ContractUtils.RequiresNotNull(Object value, String paramName)
at System.Linq.Expressions.Expression.Validate(Type type, Boolean allowByRef)
at System.Linq.Expressions.Expression.Parameter(Type type, String name)
at Syncfusion.Blazor.Data.QueryableExtensions.Parameter(Type sourceType)
at Syncfusion.Blazor.Data.EnumerableOperation.PerformFiltering(IEnumerable dataSource, List`1 whereFilter, String condition)
at Syncfusion.Blazor.DataOperations.PerformFiltering(IEnumerable dataSource, List`1 whereFilter, String condition)
at Syncfusion.Blazor.Data.BlazorAdaptor.DataOperationInvoke[ModelRabotiGarajey](IEnumerable DataSource, DataManagerRequest queries)
at Syncfusion.Blazor.Data.BlazorAdaptor.
это исключение, которое я получаю. какой тип (Parameter 'type') в данном случае имеется ввиду, я пытаюсь отлаживать чтоб просмотреть все данные, вроде все везде заполненно, только вот данное исключение бросает, когда я нажимаю на иконку поиска в компоненте синфузион.
вот что интересно, когда в мультипоиске я выбираю более одного гаража, все работает корректно, а когда один гараж, то что то работает неккоректно,
ПОЖАЛУЙСТА помогите разобраться
//у меня не хватило репутации добавить метку Syncfusion. понятно, что у них есть свое сообщество, там я не нашла ответа и задала свой вопрос там тоже естественно, но можно добавить метку и тут, чтоб расширить вопросы и ответы для программистов в русскоязычном сообществе
Ответы (1 шт):
В моем случае, функция, по которой строится байндинг моей таблице, только при повторном прохождении цикла преоразовываЛА объект в лист, я пыталась разобраться в функциях, по видимому, когда мой байндинг еще не являлся листом, он воспринимал как пустое и выдавал ошибку. ниже функция syncfusion для фильтра и собственно функция concat, благодаря которой мой объект стал листом, и пройдя много раз все варианты, я поняла, что syncfusionждет лист,,, //фильтр не выдает больше данной ошиюбки и задача решенна
//fonctionne de filtre Syncfusion
//
// Résumé :
// Processing the property value changes and invoking the events for two-way bindings.
internal virtual async Task<T> UpdateProperty<T>(string propertyName, T publicValue, T privateValue, object eventCallback = null, Expression<Func<T>> expression = null)
{
T finalResult = publicValue;
if (!EqualityComparer<T>.Default.Equals(publicValue, privateValue))
{
T newValue = (DirectParameters.ContainsKey(propertyName) ? ((T)DirectParameters[propertyName]) : publicValue);
bool flag = eventCallback != null && ((EventCallback<T>)eventCallback).HasDelegate;
bool isPropertyBinding = !SfBaseUtils.Equals(publicValue, newValue) && IsRerendering;
SfBaseComponent sfBaseComponent = ((MainParent != null) ? MainParent : this);
bool flag2 = IsRerendering && flag;
finalResult = ((flag2 || isPropertyBinding || !sfBaseComponent.IsRendered) ? publicValue : privateValue);
if (flag)
{
await ((EventCallback<T>)eventCallback).InvokeAsync(finalResult);
}
if (isPropertyBinding)
{
DirectParameters[propertyName] = finalResult;
SfBaseUtils.UpdateDictionary(propertyName, finalResult, base.PropertyChanges);
}
}
return finalResult;
}
//fonctionne Concat
public static IEnumerable<TSource> Concat<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second)
{
if (first == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.first);
}
if (second == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.second);
}
return first is ConcatIterator<TSource> firstConcat
? firstConcat.Concat(second)
: new Concat2Iterator<TSource>(first, second);
}
***использовав Concat я получала лист, и поэтому, я добавила missionListsModelTemp.**ToList();** при выбрасывании исключения и это помогло.
private async Task GetRabotiGarajey()
{
tablicaPoKotoroyDelayuBindingPokaza = null; //иначе прибавляет потом строки
tablicaVremennaya = null; //то же самое
foreach (var garaje in SpisokGarajey)
{
if (!string.IsNullOrEmpty(garaj.code1) && !string.IsNullOrEmpty(garaj.code2))
try
{
tablicaVremennaya = await garajService.GetGarajList(garaj.code1, garaj.code2);
if (tablicaPoKotoroyDelayuBindingPokaza == null)
{
//тут я преобразовала в лист и это помогло, но мне не ясно...
tablicaPoKotoroyDelayuBindingPokaza =missionListsModelTemp.ToList();
}
else
{
tablicaPoKotoroyDelayuBindingPokaza =
tablicaPoKotoroyDelayuBindingPokaza.Concat(tablicaVremennaya);
//то есть первый гараж в таблице уже есть и я добавляю строки второго гаража с помощью Concat
}
}
catch (Exception e)
{
string msg = e.Message;
}
}
this.StateHasChanged();
}
вопрос решен, но не удовлетворителен