Skip to main content
A newer version of this page is available. .

GridCustomSortEventArgs Class

Contains data for the CustomSort event.

Namespace: DevExpress.Blazor

Assembly: DevExpress.Blazor.v21.1.dll

NuGet Package: DevExpress.Blazor

Declaration

public class GridCustomSortEventArgs

Remarks

Follow the steps below to implement custom logic used to sort data in the DxGrid.

  • Set the SortMode property to GridColumnSortMode.Custom.
  • Handle the DxGrid.CustomSort event to implement your logic that compares column values. Use the GridCustomSortEventArgs event arguments (Value1, Value2, FieldName, and so on) to access column values and other grid data.

The code below implements custom logic to sort the Order Date column’s values without taking into account the year part of the date.

@using Microsoft.EntityFrameworkCore
@using Grid.Northwind
@inject NorthwindContext Northwind

<DxGrid Data="GridDataSource"
        CustomizeCellDisplayText="Grid_CustomColumnDisplayText"
        UnboundColumnData="Grid_CustomUnboundColumnData"
        CustomSort="OnCustomSort">
    <Columns>
        <DxGridDataColumn FieldName="OrderDate" DisplayFormat="d" GroupInterval="GridColumnGroupInterval.DateMonth"
                      SortIndex="0"
                      SortMode="GridColumnSortMode.Custom" />
        <DxGridDataColumn FieldName="Customer" />
        <DxGridDataColumn FieldName="ShipViaNavigation.CompanyName" />
        <DxGridDataColumn FieldName="Freight" DisplayFormat="n2" />
        <DxGridDataColumn FieldName="Amount" UnboundType="GridUnboundColumnType.Decimal" DisplayFormat="c" />
    </Columns>
</DxGrid>

@code {
    object GridDataSource { get; set; }

    protected override void OnInitialized() {
        GridDataSource = Northwind.Orders
            .Include(i => i.Customer)
            .Include(i => i.OrderDetails)
            .Include(i => i.ShipViaNavigation)
            .ToList();
    }

    void Grid_CustomColumnDisplayText(GridCustomizeCellDisplayTextEventArgs e) {
        if (e.FieldName == "Customer") {
            var customer = (Customer)e.Value;
            e.DisplayText = $"{customer.CompanyName} ({customer.Country}, {customer.City})";
        }
    }

    void Grid_CustomUnboundColumnData(GridUnboundColumnDataEventArgs e) {
        if (e.FieldName == "Amount") {
            var details = (ICollection<OrderDetail>)e.GetRowValue("OrderDetails");
            e.Value = details.Sum(i => i.Quantity * i.UnitPrice * (1 - (decimal)i.Discount));
        }
    }

    void OnCustomSort(GridCustomSortEventArgs e) {
        if (e.FieldName == "OrderDate") {
            e.Handled = true;
            int month1 = Convert.ToDateTime(e.Value1).Month;
            int month2 = Convert.ToDateTime(e.Value2).Month;
            if (month1 > month2)
                e.Result = 1;
            else if (month1 < month2)
                e.Result = -1;
            else e.Result = System.Collections.Comparer.Default.Compare(Convert.ToDateTime(e.Value1).Day, Convert.ToDateTime(e.Value2).Day);
        }
    }
}

Grid - Custom Sorting

Note

The Grid does not support custom sorting when you use a GridDevExtremeDataSource.

Inheritance

Object
GridCustomSortEventArgs
See Also