RadzenDataGrid validation with EditContext

Hi! I want to place RadzenDataGrid inside EditForm in order to perform validation of various editors with EditContext. Here is my code example:

<EditForm EditContext=editContext>
    <RadzenDataGrid @ref=grid Data=@MyModel.Items TItem="SomeItem">
        <Columns>
            <RadzenDataGridColumn TItem="SomeItem" Property="Text" Title="Text">
                <EditTemplate Context="item">
                    <RadzenTextBox @bind-Value="item.Text" />
                </EditTemplate>
            </RadzenDataGridColumn>
        </Columns>
    </RadzenDataGrid>
    <RadzenButton Click="Edit" Text="Edit"/>
    <RadzenButton Disabled="@(!CanSave)" Text="Save"/>
</EditForm>

@code
{
    RadzenDataGrid<SomeItem> grid;

    SomeModel MyModel = new SomeModel();

    public bool CanSave { get; set; } = false;

    private EditContext? editContext;

    protected override void OnInitialized()
    {
        editContext = new EditContext(MyModel);
        editContext.OnFieldChanged += HandleFieldChanged;
        base.OnInitialized();
    }

    private void HandleFieldChanged(object? sender, FieldChangedEventArgs e)
    {
        if (editContext != null)
        {
            CanSave = editContext.Validate();
        }
    }

    private async Task Edit()
    {
        await grid.EditRow(MyModel.Items.First());
    }


    public class SomeModel
    {
        public  List<SomeItem> Items { get;set; } = new List<SomeItem>()
        {
            new SomeItem
            {
                Text = "1"
            },
            new SomeItem
            {
                Text = "2"
            },
            new SomeItem
            {
                Text = "3"
            },
            new SomeItem
            {
                Text = "4"
            }
        };
    }

    public class SomeItem
    {
        public string Text { get;set; }
    }
}

HandleFieldChanged event is never fired. Is it possible to use RadzenDataGrid with EditContext?

Hi @p.ivanov,

RadzenDataGrid uses an EditContext of its own (because of inline editing). You can try injecting your own:

                <EditTemplate Context="item">
                    <CascadingValue Value=@editContext>
                        <RadzenTextBox @bind-Value="item.Text" />
                    </CascadingValue>
                </EditTemplate>
1 Like

Thanks a lot, that helped!