Define Grid events programmatically in Blazor DataGrid

3 Dec 20253 minutes to read

In the Syncfusion® Blazor DataGrid, events are typically defined using the GridEvents child Razor component. As an alternative, Grid events can also be configured programmatically by accessing the Grid instance through a component reference. This approach is useful when events need to be assigned dynamically during the application lifecycle.

Note: Assigning Grid.GridEvents programmatically replaces any events declared via the <GridEvents> markup for that Grid instance.

To define events programmatically:

  • Set a reference to the Grid using the @ref directive.
  • After the Grid is rendered, assign the GridEvents property within the OnAfterRenderAsync lifecycle method (guarded by firstRender).
  • Use the EventCallbackFactory to create event handlers bound to the component context.
@using Syncfusion.Blazor.Grids
@inject IJSRuntime JS

<SfGrid @ref="Grid" DataSource="@Orders">
</SfGrid>

@code{
    SfGrid<Order> Grid { get; set; }
    public List<Order> Orders { get; set; }

    protected override Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender && Grid != null)
        {
            Grid.GridEvents = new GridEvents<Order>()
            {
                DataBound = new EventCallbackFactory().Create<object>(this, DataBoundHandler)
            };
        }
        return base.OnAfterRenderAsync(firstRender);
    }

    public async Task DataBoundHandler()
    {
        await JS.InvokeVoidAsync("alert", "Grid data loaded successfully.");
    }

    protected override void OnInitialized()
    {
        Orders = new List<Order>()
        {
            new Order() { OrderID = 1001, EmployeeID = 1, OrderDate = DateTime.Now.AddDays(-1), ShipCountry = "Sweden" },
            new Order() { OrderID = 1002, EmployeeID = 2, OrderDate = DateTime.Now.AddDays(-2), ShipCountry = "Germany" },
            new Order() { OrderID = 1003, EmployeeID = 3, OrderDate = DateTime.Now.AddDays(-3), ShipCountry = "Argentina" },
            new Order() { OrderID = 1004, EmployeeID = 4, OrderDate = DateTime.Now.AddDays(-4), ShipCountry = "Mexico" },
            new Order() { OrderID = 1005, EmployeeID = 5, OrderDate = DateTime.Now.AddDays(-5), ShipCountry = "Denmark" },
            new Order() { OrderID = 1006, EmployeeID = 6, OrderDate = DateTime.Now.AddDays(-6), ShipCountry = "Finland" },
            new Order() { OrderID = 1007, EmployeeID = 7, OrderDate = DateTime.Now.AddDays(-7), ShipCountry = "Switzerland" },
            new Order() { OrderID = 1008, EmployeeID = 8, OrderDate = DateTime.Now.AddDays(-8), ShipCountry = "UK" },
            new Order() { OrderID = 1009, EmployeeID = 9, OrderDate = DateTime.Now.AddDays(-9), ShipCountry = "Sweden" }
        };
    }

    public class Order
    {
        public int? OrderID { get; set; }
        public int? EmployeeID { get; set; }
        public DateTime? OrderDate { get; set; }
        public string ShipCountry { get; set; }
    }
}