Revert "Fixed datagrid sort issues due to duplicate sortDescriptor lists. (#1996)"

This reverts commit 57f1417d4c.
This commit is contained in:
Vladimir Enchev
2025-03-06 15:46:03 +02:00
parent 45d38494f2
commit 2c71574072
3 changed files with 35 additions and 109 deletions

View File

@@ -5,7 +5,7 @@ using Microsoft.AspNetCore.Components.Rendering;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
using Xunit;
namespace Radzen.Blazor.Tests
@@ -362,82 +362,6 @@ namespace Radzen.Blazor.Tests
component.Find(".rz-sortable-column").FirstElementChild.Click();
Assert.Contains(@$"rzi-sort-desc", component.Markup);
component.Find(".rz-sortable-column").FirstElementChild.Click();
Assert.DoesNotContain(@$"rzi-sort-desc", component.Markup);
Assert.DoesNotContain(@$"rzi-sort-asc", component.Markup);
}
// clear Sorting tests
[Fact]
public void DataGrid_Renders_ClearSorting()
{
using var ctx = new TestContext();
ctx.JSInterop.Mode = JSRuntimeMode.Loose;
ctx.JSInterop.SetupModule("_content/Radzen.Blazor/Radzen.Blazor.js");
var component = ctx.RenderComponent<RadzenDataGrid<dynamic>>(parameterBuilder =>
{
parameterBuilder.Add<IEnumerable<dynamic>>(p => p.Data, Enumerable.Range(0, 100).Select(i => new { Id = i }));
parameterBuilder.Add<RenderFragment>(p => p.Columns, builder =>
{
builder.OpenComponent(0, typeof(RadzenDataGridColumn<dynamic>));
builder.AddAttribute(1, "Property", "Id");
builder.AddAttribute(2, "Title", "Id");
builder.CloseComponent();
});
parameterBuilder.Add<bool>(p => p.AllowSorting, true);
});
component.Find(".rz-sortable-column").FirstElementChild.Click();
Assert.Contains(@$"rzi-sort-asc", component.Markup);
component.Instance.Sorts.Clear();
Assert.DoesNotContain(@$"rzi-sort-desc", component.Markup);
Assert.DoesNotContain(@$"rzi-sort-asc", component.Markup);
}
// sorting with load data event test.
[Fact]
public void DataGrid_Renders_LoadDataWithOrdering()
{
using var ctx = new TestContext();
ctx.JSInterop.Mode = JSRuntimeMode.Loose;
ctx.JSInterop.SetupModule("_content/Radzen.Blazor/Radzen.Blazor.js");
List<LoadDataArgs> loadDataArgs = [];
var component = ctx.RenderComponent<RadzenDataGrid<dynamic>>(parameterBuilder =>
{
parameterBuilder.Add<IEnumerable<dynamic>>(p => p.Data, Enumerable.Range(0, 100).Select(i => new { Id = i }));
parameterBuilder.Add<RenderFragment>(p => p.Columns, builder =>
{
builder.OpenComponent(0, typeof(RadzenDataGridColumn<dynamic>));
builder.AddAttribute(1, "Property", "Id");
builder.AddAttribute(2, "Title", "Id");
builder.CloseComponent();
});
parameterBuilder.Add<bool>(p => p.AllowSorting, true);
parameterBuilder.Add(p => p.LoadData, args => loadDataArgs.Add(args));
});
component.Find(".rz-sortable-column").FirstElementChild.Click();
Assert.Contains(@$"rzi-sort-asc", component.Markup);
component.Instance.Sorts.Clear();
component.Render();
Assert.DoesNotContain(@$"rzi-sort-desc", component.Markup);
Assert.DoesNotContain(@$"rzi-sort-asc", component.Markup);
Assert.Equal(4, loadDataArgs.Count);
Assert.Equal("", loadDataArgs[0].OrderBy);
Assert.Equal("Id asc", loadDataArgs[1].OrderBy);
Assert.Equal("Id asc", loadDataArgs[2].OrderBy);
Assert.Equal("", loadDataArgs[3].OrderBy);
}
// Paging tests

View File

@@ -678,11 +678,11 @@ namespace Radzen.Blazor
}
}
var descriptor = Sorts.Where(d => d.Property == column?.GetSortProperty()).FirstOrDefault();
var descriptor = sorts.Where(d => d.Property == column?.GetSortProperty()).FirstOrDefault();
if (descriptor == null && column.SortOrder.HasValue)
{
descriptor = new SortDescriptor() { Property = column.GetSortProperty(), SortOrder = column.SortOrder.Value };
Sorts.Add(descriptor);
sorts.Add(descriptor);
}
if (!allColumns.Contains(column))
@@ -1685,7 +1685,7 @@ namespace Radzen.Blazor
internal string GetOrderBy()
{
return string.Join(",", Sorts.Select(d => GetSortOrderAsString(d, IsOData())));
return string.Join(",", sorts.Select(d => GetSortOrderAsString(d, IsOData())));
}
internal string GetSortOrderAsString(SortDescriptor d, bool isOData)
@@ -2071,7 +2071,7 @@ namespace Radzen.Blazor
c.SetVisible(null);
});
selectedColumns = allColumns.Where(c => c.Pickable && c.GetVisible()).ToList();
Sorts.Clear();
sorts.Clear();
columns = allColumns.Where(c => c.Parent == null).ToList();
}
}
@@ -2184,7 +2184,7 @@ namespace Radzen.Blazor
.ToList();
Query.Filters = filters;
Query.Sorts = Sorts.ToList();
Query.Sorts = sorts;
if (LoadData.HasDelegate)
{
await LoadData.InvokeAsync(new Radzen.LoadDataArgs()
@@ -2194,7 +2194,7 @@ namespace Radzen.Blazor
OrderBy = orderBy,
Filter = IsOData() ? allColumns.ToList().ToODataFilterString<TItem>() : filterString,
Filters = filters,
Sorts = Sorts.ToList()
Sorts = sorts
});
}
}
@@ -3032,46 +3032,48 @@ namespace Radzen.Blazor
return isOData != null ? isOData.Value : false;
}
internal List<SortDescriptor> sorts = new List<SortDescriptor>();
internal void SetColumnSortOrder(RadzenDataGridColumn<TItem> column)
{
var CurrentSortDescriptor = Sorts.FirstOrDefault(d => d.Property == column?.GetSortProperty());
if (!AllowMultiColumnSorting)
{
foreach (var c in allColumns.ToList().Where(c => c != column))
{
c.SetSortOrderInternal(null);
}
Sorts.Clear();
sorts.Clear();
}
if (CurrentSortDescriptor == null)
var descriptor = sorts.Where(d => d.Property == column?.GetSortProperty()).FirstOrDefault();
if (descriptor == null)
{
CurrentSortDescriptor = new SortDescriptor() { Property = column.GetSortProperty() };
descriptor = new SortDescriptor() { Property = column.GetSortProperty() };
}
if (CurrentSortDescriptor.SortOrder == null)
if (column.GetSortOrder() == null)
{
column.SetSortOrderInternal(SortOrder.Ascending);
CurrentSortDescriptor.SortOrder = SortOrder.Ascending;
descriptor.SortOrder = SortOrder.Ascending;
}
else if (CurrentSortDescriptor.SortOrder == SortOrder.Ascending)
else if (column.GetSortOrder() == SortOrder.Ascending)
{
column.SetSortOrderInternal(SortOrder.Descending);
CurrentSortDescriptor.SortOrder = SortOrder.Descending;
descriptor.SortOrder = SortOrder.Descending;
}
else if (CurrentSortDescriptor.SortOrder == SortOrder.Descending)
else if (column.GetSortOrder() == SortOrder.Descending)
{
column.SetSortOrderInternal(null);
if (Sorts.Any(d => d.Property == column?.GetSortProperty()))
if (sorts.Where(d => d.Property == column?.GetSortProperty()).Any())
{
Sorts.Remove(CurrentSortDescriptor);
sorts.Remove(descriptor);
}
CurrentSortDescriptor = null;
descriptor = null;
}
if (CurrentSortDescriptor != null && !Sorts.Any(d => d.Property == column?.GetSortProperty()))
if (descriptor != null && !sorts.Where(d => d.Property == column?.GetSortProperty()).Any())
{
Sorts.Add(CurrentSortDescriptor);
sorts.Add(descriptor);
}
}

View File

@@ -182,7 +182,7 @@ namespace Radzen.Blazor
}
}
}
int? orderIndex;
/// <summary>
@@ -764,7 +764,7 @@ namespace Radzen.Blazor
internal void SetSortOrder(SortOrder? order)
{
var descriptor = Grid.Sorts.Where(d => d.Property == GetSortProperty()).FirstOrDefault();
var descriptor = Grid.sorts.Where(d => d.Property == GetSortProperty()).FirstOrDefault();
if (descriptor == null)
{
descriptor = new SortDescriptor() { Property = GetSortProperty() };
@@ -778,16 +778,16 @@ namespace Radzen.Blazor
else
{
SetSortOrderInternal(null);
if (Grid.Sorts.Where(d => d.Property == GetSortProperty()).Any())
if (Grid.sorts.Where(d => d.Property == GetSortProperty()).Any())
{
Grid.Sorts.Remove(descriptor);
Grid.sorts.Remove(descriptor);
}
descriptor = null;
}
if (descriptor != null && !Grid.Sorts.Where(d => d.Property == GetSortProperty()).Any())
if (descriptor != null && !Grid.sorts.Where(d => d.Property == GetSortProperty()).Any())
{
Grid.Sorts.Add(descriptor);
Grid.sorts.Add(descriptor);
}
sortOrder = new SortOrder?[] { order };
@@ -907,10 +907,10 @@ namespace Radzen.Blazor
if (Grid != null)
{
var descriptor = Grid.Sorts.Where(d => d.Property == GetSortProperty()).FirstOrDefault();
var descriptor = Grid.sorts.Where(d => d.Property == GetSortProperty()).FirstOrDefault();
if (descriptor == null)
{
Grid.Sorts.Add(new SortDescriptor() { Property = GetSortProperty(), SortOrder = sortOrder.FirstOrDefault() });
Grid.sorts.Add(new SortDescriptor() { Property = GetSortProperty(), SortOrder = sortOrder.FirstOrDefault() });
Grid._view = null;
}
}
@@ -1116,7 +1116,7 @@ namespace Radzen.Blazor
if (isFirst)
{
filterValue = CanSetCurrentValue(value) ? value :
filterValue = CanSetCurrentValue(value) ? value :
GetFilterOperator() == FilterOperator.IsEmpty || GetFilterOperator() == FilterOperator.IsNotEmpty ? string.Empty : null;
}
else
@@ -1221,7 +1221,7 @@ namespace Radzen.Blazor
/// </summary>
/// <value>The filter operator.</value>
[Parameter]
public FilterOperator FilterOperator
public FilterOperator FilterOperator
{
get
{
@@ -1505,10 +1505,10 @@ namespace Radzen.Blazor
/// </summary>
public int? GetSortIndex()
{
var descriptor = Grid.Sorts.Where(s => s.Property == GetSortProperty()).FirstOrDefault();
var descriptor = Grid.sorts.Where(s => s.Property == GetSortProperty()).FirstOrDefault();
if (descriptor != null)
{
return Grid.Sorts.IndexOf(descriptor);
return Grid.sorts.IndexOf(descriptor);
}
return null;