Skip to main content

DxDataGrid<T>.RowInserting Event

Occurs when a user adds a new data row.

Namespace: DevExpress.Blazor

Assembly: DevExpress.Blazor.v22.1.dll


public Action<Dictionary<string, object>> RowInserting { get; set; }


Type Description
Dictionary<String, Object>

A collection of a row values that is passed to a delegate method as a parameter.



The Data Grid was moved to maintenance support mode. No new features/capabilities will be added to this component. We recommend that you migrate to the Grid component.

When users click the New button in a command column, the grid displays the Edit Form where you can specify a new row’s data. To post new values to the Data Grid’s data source or discard these values, handle the RowInserting event.

To control the visibility of the New command button, use the NewButtonVisible property.

@using System.Collections.ObjectModel

<DxDataGrid Data="@weatherForecasts"
            RowInserting="@((newValues) => OnRowInserting(newValues))">
    <DxDataGridCommandColumn />
    <DxDataGridDateEditColumn Field="@nameof(WeatherForecast.Date)" />
    <DxDataGridSpinEditColumn Field="@nameof(WeatherForecast.TemperatureC)" />
    <DxDataGridColumn Field="@nameof(WeatherForecast.CloudCover)" />
    <DxDataGridCheckBoxColumn Field="@nameof(WeatherForecast.Precipitation)" />

@code {
    public class WeatherForecast {
        public DateTime Date { get; set; }
        public int TemperatureC { get; set; }            
        public string CloudCover { get; set; }
        public bool Precipitation { get; set; }

    static readonly Random random = new Random();
    readonly ObservableCollection<WeatherForecast> weatherForecasts = new ObservableCollection<WeatherForecast>();

    protected override void OnInitialized() {
        String[] CloudCover = {"Sunny", "Partly cloudy", "Cloudy", "Storm"};

        foreach (var date in Enumerable.Range(1, 30).Select(i => DateTime.Now.Date.AddDays(i))) {
            weatherForecasts.Add(new WeatherForecast() {
                Date = date,
                TemperatureC = random.Next(10, 20),
                Precipitation = Convert.ToBoolean(random.Next(0, 2)),
                CloudCover = CloudCover[random.Next(0,CloudCover.Length)]

    async Task OnInitNewRow(Dictionary<string, object> values) {
        values.Add("Date", DateTime.Now);
        values.Add("TemperatureC", 13);
        values.Add("CloudCover", "Sunny");

    static WeatherForecast UpdateItem(WeatherForecast item, Dictionary<string, object> itemProperties) {
        foreach (var field in itemProperties.Keys) {
            switch (field) {
                case "Date":
                    item.Date = (DateTime)itemProperties[nameof(WeatherForecast.Date)];
                case "TemperatureC":
                    item.TemperatureC = (int)itemProperties[nameof(WeatherForecast.TemperatureC)];
                case "Precipitation":
                    item.Precipitation = (bool)itemProperties[nameof(WeatherForecast.Precipitation)];
        return item;

    void OnRowInserting(Dictionary<string, object> itemProperties) {
        weatherForecasts.Add(UpdateItem(new WeatherForecast(), itemProperties));


If you bind the data grid to a data source that does not implement the INotifyCollectionChanged interface, you should reload data and redraw the grid after a row is inserted. To do this, use the Refresh method in the OnRowInserting handler.

Run Demo: Data Grid - Column Types

See Also