Open
Description
Is there an existing issue for this?
- I have searched the existing issues
Describe the bug
I'm trying to send current chosen sort blazor quickgrid column to my backend.
So when I try to run the the following inside OnInitializedAsync I get an error on GetSortByProperties:
public GridItemsProvider<TestEntity>? TestCallProvider { get; set; }
TestCallProvider = async req =>
{
var tq = req;
var sortColumn = req.GetSortByProperties();
if(req.GetSortByProperties().Any())
{
var propertyName = sortColumn?.FirstOrDefault().PropertyName;
var direction = sortColumn?.FirstOrDefault().Direction;
}
Seems like it has issues with following property in my quickgrid:
- doesn't seem to like my TimeStamp
<DisplayNameColumn Property="@(p => p.TimeStamp)"
Format="dd.MM yy"
Sortable="true"
InitialSortDirection="SortDirection.Descending"
IsDefaultSortColumn="true">
which is as nulllable datetime:
[Display(Name = "Tidspunkt")]
public DateTime? TimeStamp { get; set; }
displaycolumn looks like this:
public class DisplayNameColumn<TGridItem, TProp> : PropertyColumn<TGridItem, TProp>
{
//protected override void OnParametersSet()
//{
// if (Title is null && Property.Body is MemberExpression memberExpression)
// {
// var memberInfo = memberExpression.Member;
// Title =
// memberInfo.GetCustomAttribute<DisplayNameAttribute>()?.DisplayName ??
// memberInfo.GetCustomAttribute<DisplayAttribute>()?.GetName() ??
// memberInfo.Name;
// }
// base.OnParametersSet();
//}
protected override void OnParametersSet()
{
if (Title is null)
{
MemberInfo? memberInfo = null;
if (Property.Body is MemberExpression memberExpression)
{
memberInfo = memberExpression.Member;
}
else if (Property.Body is UnaryExpression unaryExpression &&
unaryExpression.Operand is MemberExpression unaryMember)
{
memberInfo = unaryMember.Member;
}
if (memberInfo != null)
{
Title =
memberInfo.GetCustomAttribute<DisplayNameAttribute>()?.DisplayName ??
memberInfo.GetCustomAttribute<DisplayAttribute>()?.GetName() ??
memberInfo.Name;
}
}
base.OnParametersSet();
}
}
Expected Behavior
All I want is the name as string of the column that it current sorting on, with no issues.
Exception
Error I receive is the following issue:
Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: The supplied expression can't be represented as a property name for sorting. Only simple member expressions, such as @(x => x.SomeProperty), can be converted to property names.
System.ArgumentException: The supplied expression can't be represented as a property name for sorting. Only simple member expressions, such as @(x => x.SomeProperty), can be converted to property names.
at Microsoft.AspNetCore.Components.QuickGrid.GridSort`1[[TestProject.Client.Models.TestModelEntity, TestProject.Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].ToPropertyName(LambdaExpression expression)
at Microsoft.AspNetCore.Components.QuickGrid.GridSort`1[[TestProject.Client.Models.TestModelEntity, TestProject.Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].BuildPropertyList(Boolean ascending)
at Microsoft.AspNetCore.Components.QuickGrid.GridSort`1[[TestProject.Client.Models.TestModelEntity, TestProject.Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].ToPropertyList(Boolean ascending)
at Microsoft.AspNetCore.Components.QuickGrid.GridItemsProviderRequest`1[[TestProject.Client.Models.TestModelEntity, TestProject.Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].GetSortByProperties()
at TestProject.Client.Pages.TestPage.<OnInitializedAsync>b__16_0(GridItemsProviderRequest`1 req) in C:\TestFolder\TestProject\TestProject\TestProject.Client\Pages\TestPage.razor.cs:line 36
at Microsoft.AspNetCore.Components.QuickGrid.QuickGrid`1.<ResolveItemsRequestAsync>d__83[[TestProject.Client.Models.TestModelEntity, TestProject.Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
at Microsoft.AspNetCore.Components.QuickGrid.QuickGrid`1.<RefreshDataCoreAsync>d__81[[TestProject.Client.Models.TestModelEntity, TestProject.Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)
at Microsoft.AspNetCore.Components.QuickGrid.Infrastructure.EventCallbackSubscribable`1.<InvokeCallbacksAsync>d__1[[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
.NET Version & application
Blazor
.net 9.0