Edit inline UpdateRow error

I have this error when fire UpdateRow inline Edit

System.InvalidOperationException: Cannot find component with Name Text
at Radzen.Blazor.ValidatorBase.ValidateModel(Object sender, ValidationRequestedEventArgs args)
at Microsoft.AspNetCore.Components.Forms.EditContext.Validate()
at Radzen.Blazor.RadzenDataGrid`1.UpdateRow(TItem item)

HI @Maverick1983,

Please check the forum FAQ for tips how to improve your question.

This is my code:

@using Microsoft.EntityFrameworkCore
@using FlashSite.Data
@using System.Linq.Dynamic.Core


@inject CandidatiDBContext dbContext
@inject NavigationManager Navigator
@inject Utente utente
@inject DialogService DialogService

@page "/"

<PageTitle>Index</PageTitle>

@if (utente?.Username != null)
{
    isVisible = true;
    <h1>Ciao: @utente.Username</h1>
    <!--Disabled=@(candidatoToInsert != null || candidatoToUpdate != null) -->
    <RadzenButton ButtonStyle="ButtonStyle.Success" Icon="add_circle_outline" class="mt-2 mb-4" Text="Aggiungi nuovo candidato" Click="@InsertRow" Disabled=true />
}
else
{
    isVisible = false;
    <h1>Buongiorno</h1>
    <p>Benvenuto nel nuovo sito: @Navigator.BaseUri</p>
}

<div class="row">
    <div class="col-lg">
        <RadzenDataGrid @ref="candidatoGrid" AllowMultiColumnSorting="true" ColumnWidth="200px"
                EmptyText="Nessun dato trovato"
                ShowEmptyMessage="true"
                AllowFiltering="true" 
                AllowColumnResize="true" 
                AllowAlternatingRows="true"
                FilterMode="FilterMode.Advanced"
                AllowSorting="true" 
                PageSize="25" 
                AllowPaging="true" 
                PagerHorizontalAlign="HorizontalAlign.Left" 
                ShowPagingSummary="true"
                Data="@candidati" 
                TItem="Candidato"
                LogicalFilterOperator="LogicalFilterOperator.Or"
                        RowUpdate="@OnUpdateRow" RowCreate="@OnCreateRow" Sort="@Reset" Page="@Reset" Filter="@Reset" RowRender="@RowRender"
                        RowExpand="RowExpand" ExpandMode="DataGridExpandMode.Multiple">
                 <Template Context="candidati">
                     <RadzenDataGrid AllowColumnResize="true" AllowFiltering="true" AllowPaging="true" AllowSorting="true" Data="@candidati.Richieste" TItem="Richiesta">
                        <Columns>
                            <RadzenDataGridColumn TItem="Richiesta" Filterable="false" Sortable="false" TextAlign="TextAlign.Left">
                                <Template>
                                    <RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" Click=@(args => ChiudiRichiesta())>
                                    </RadzenButton>
                                </Template>
                                <EditTemplate>
                                    <RadzenButton Icon="check" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Size="ButtonSize.Medium" Click=@((args) => ChiudiRichiesta())>
                                    </RadzenButton>
                                    <RadzenButton Icon="close" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" class="my-1 ms-1" Click=@((args) => ChiudiRichiesta())>
                                    </RadzenButton>
                                </EditTemplate>
                            </RadzenDataGridColumn>
                            <!--Button for Evaso=true-->
                            <RadzenDataGridColumn TItem="Richiesta" Filterable="false" Sortable="false" TextAlign="TextAlign.Left" Width="40px">
                                <Template>
                                    <RadzenButton Icon="assignment_ind" Text="Chiudi Richiesta" ButtonStyle="ButtonStyle.Secondary" Variant="Variant.Flat" Size="ButtonSize.Medium" Click=@(() => ChiudiRichiesta()) />
                                </Template>
                            </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="Richiesta" Property="EmailRichiedente" Title="E-mail Richiedente" Width="40px" />
                            <RadzenDataGridColumn TItem="Richiesta" Property="Colloquio" Title="Colloquio" Width="30px" />
                            <RadzenDataGridColumn TItem="Richiesta" Property="Evaso" Title="Evaso" Width="30px" />
                        </Columns>
                    </RadzenDataGrid>
                </Template>
                <Columns>
                    <RadzenDataGridColumn TItem="Candidato" Property="Id" Title="id" Width="50px" Filterable="false" Frozen="true" />
                    <RadzenDataGridColumn TItem="Candidato" Property="Nome" Title="Nome" Filterable="false" Frozen="true" Width="65px">
                        <EditTemplate Context="candidato">
                            <RadzenTextBox @bind-Value="candidato.Nome" Style="width:100%; display: block" Name="Nome" />
                            <RadzenRequiredValidator Text="Nome is required" Component="Text" Popup="true" />
                        </EditTemplate>
                    </RadzenDataGridColumn>
                    <RadzenDataGridColumn TItem="Candidato" Property="Nomi" Title="Nome" Filterable="false" Frozen="true" Visible="@isVisible">
                        <EditTemplate Context="candidato">
                            <RadzenTextBox @bind-Value="candidato.Nomi" Style="width:100%; display: block" Name="Nomi" />
                            <RadzenRequiredValidator Text="Nomi is required" Component="Text" Popup="true" />
                        </EditTemplate>
                    </RadzenDataGridColumn>
                    <RadzenDataGridColumn TItem="Candidato" Property="Ruolo" Title="Ruolo">
                        <EditTemplate Context="candidato">
                            <RadzenTextBox @bind-Value="candidato.Ruolo" Style="width:100%; display: block" Name="Ruolo" />
                            <RadzenRequiredValidator Text="Ruolo is required" Component="Text" Popup="true" />
                        </EditTemplate>
                    </RadzenDataGridColumn>
                    <RadzenDataGridColumn TItem="Candidato" Property="Eta" Title="EtĂ " Width="75px">
                        <EditTemplate Context="candidato">
                            <RadzenNumeric @bind-Value="candidato.Eta" Style="width:100%; display: block" Name="EtĂ " />
                            <RadzenRequiredValidator Text="Eta is required" Component="Text" Popup="true" />
                        </EditTemplate>
                    </RadzenDataGridColumn>
                    <RadzenDataGridColumn TItem="Candidato" Property="Seniority" Title="Seniority">
                        <EditTemplate Context="candidato">
                        <RadzenTextBox @bind-Value="candidato.Seniority" Style="width:100%; display: block" Name="Seniority" />
                            <RadzenRequiredValidator Text="Seniority is required" Component="Text" Popup="true" />
                        </EditTemplate>
                    </RadzenDataGridColumn>
                    <RadzenDataGridColumn TItem="Candidato" Property="Sede" Title="Sede">
                        <EditTemplate Context="candidato">
                            <RadzenTextBox @bind-Value="candidato.Sede" Style="width:100%; display: block" Name="Sede" />
                            <RadzenRequiredValidator Text="Sede is required" Component="Text" Popup="true" />
                        </EditTemplate>
                    </RadzenDataGridColumn>
                    <RadzenDataGridColumn TItem="Candidato" Property="Skill" Title="Skill">
                        <EditTemplate Context="candidato">
                            <RadzenTextBox @bind-Value="candidato.Skill" Style="width:100%; display: block" Name="Skill" />
                            <RadzenRequiredValidator Text="Skill is required" Component="Text" Popup="true" />
                        </EditTemplate>
                    </RadzenDataGridColumn>
                    <RadzenDataGridColumn TItem="Candidato" Property="Lingue" Title="Lingue">
                        <EditTemplate Context="candidato">
                            <RadzenTextBox @bind-Value="candidato.Lingue" Style="width:100%; display: block" Name="Lingue" />
                            <RadzenRequiredValidator Text="Lingue is required" Component="Text" Popup="true" />
                        </EditTemplate>
                    </RadzenDataGridColumn>
                    <RadzenDataGridColumn TItem="Candidato" Property="Disponibilita" Title="DisponibilitĂ ">
                        <EditTemplate Context="candidato">
                            <RadzenTextBox @bind-Value="candidato.Disponibilita" Style="width:100%; display: block" Name="DisponibilitĂ " />
                            <RadzenRequiredValidator Text="DisponibilitĂ  is required" Component="Text" Popup="true" />
                        </EditTemplate>
                    </RadzenDataGridColumn>
                    <RadzenDataGridColumn TItem="Candidato" Property="Tipo" Title="Tipo" Width="75px" Visible="@isVisible">
                        <EditTemplate Context="candidato">
                            <RadzenTextBox @bind-Value="candidato.Tipo" Style="width:100%; display: block" Name="Tipo" />
                            <RadzenRequiredValidator Text="Tipo is required" Component="Text" Popup="true" />
                        </EditTemplate>
                    </RadzenDataGridColumn>
                    <RadzenDataGridColumn TItem="Candidato" Property="site" Title="Site" Visible="@isVisible">
                        <EditTemplate Context="candidato">
                            <RadzenTextBox @bind-Value="candidato.site" Style="width:100%; display: block" Name="Site" />
                            <RadzenRequiredValidator Text="Site is required" Component="Text" Popup="true" />
                        </EditTemplate>
                    </RadzenDataGridColumn>
                    <!--Button for Edit and Delete-->
                    <RadzenDataGridColumn TItem="Candidato" Context="candidati" Filterable="false" Sortable="false" TextAlign="TextAlign.Left" Visible="@isVisible">
                        <Template Context="candidato">
                            <RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@(args => EditRow(candidato))" @onclick:stopPropagation="true">
                            </RadzenButton>
                            <RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@(args => DeleteRow(candidato))" @onclick:stopPropagation="true">
                            </RadzenButton>
                        </Template>
                        <EditTemplate Context="candidato">
                            <RadzenButton Icon="check" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@((args) => SaveRow(candidato))">
                            </RadzenButton>
                            <RadzenButton Icon="close" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@((args) => CancelEdit(candidato))">
                            </RadzenButton>
                            <RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@(args => DeleteRow(candidato))">
                            </RadzenButton>
                        </EditTemplate>
                    </RadzenDataGridColumn>
                    <!--Button for send e-mail-->
                    <RadzenDataGridColumn TItem="Candidato" Filterable="false" Sortable="false" TextAlign="TextAlign.Left" Visible="@(!isVisible)">
                        <Template Context="candidato">
                            <RadzenButton Icon="assignment_ind" Text="Richiedi CV" ButtonStyle="ButtonStyle.Secondary" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@((args) => ShowInlineDialog(candidato))">
                            </RadzenButton>
                        </Template>
                    </RadzenDataGridColumn>
                </Columns>
        </RadzenDataGrid>
    </div>
</div>

@code {
    RadzenDataGrid<Candidato> candidatoGrid;
    IEnumerable<Candidato> candidati;

    Candidato candidatoToInsert;
    Candidato candidatoToUpdate;

    Candidato _candidatoRichiestaCV;
    string _emailRichiedente;

    bool isVisible;

    void Reset()
    {
        candidatoToInsert = null;
        candidatoToUpdate = null;
    }

    protected override async Task OnInitializedAsync()
    {
        await base.OnInitializedAsync();

        if (utente?.Username == null)
        {
            Uri _uri = new Uri(Navigator.BaseUri);
            if (_uri.Host.ToString() == "localhost") {
                candidati = dbContext.Candidato.ToList();
            }
            else
            {
                string _site = _uri.Authority.Split(".")[0];
                candidati = dbContext.Candidato.Where(x => x.site.Contains(_site)).ToList();
            }
        }
        else
        {
            candidati = dbContext.Candidato.Include("Richieste").OrderByDescending(x => x.Richieste.Any());
        }
    }

    async Task EditRow(Candidato candidato)
    {
        candidatoToUpdate = candidato;
        await candidatoGrid.EditRow(candidato);
    }

    void OnUpdateRow(Candidato candidato)
    {
        Reset();

        dbContext.Update(candidato);

        dbContext.SaveChanges();
    }

    async Task SaveRow(Candidato candidato)
    {
        await candidatoGrid.UpdateRow(candidato);
    }

    void CancelEdit(Candidato candidato)
    {
        Reset();

        candidatoGrid.CancelEditRow(candidato);

        var orderEntry = dbContext.Entry(candidato);
        if (orderEntry.State == EntityState.Modified)
        {
            orderEntry.CurrentValues.SetValues(orderEntry.OriginalValues);
            orderEntry.State = EntityState.Unchanged;
        }
    }

    async Task DeleteRow(Candidato candidato)
    {
        Reset();

        if (candidati.Contains(candidato))
        {
            dbContext.Remove<Candidato>(candidato);

            dbContext.SaveChanges();

            await candidatoGrid.Reload();
        }
        else
        {
            candidatoGrid.CancelEditRow(candidato);
            await candidatoGrid.Reload();
        }
    }

    async Task InsertRow()
    {
        candidatoToInsert = new Candidato();
        await candidatoGrid.InsertRow(candidatoToInsert);
    }

    void OnCreateRow(Candidato candidato)
    {
        dbContext.Add(candidato);

        dbContext.SaveChanges();

        candidatoToInsert = null;
    }

    async Task ShowInlineDialog(Candidato candidato)
    {
        _candidatoRichiestaCV = candidato;

        var result = await DialogService.OpenAsync("Richiesta CV", ds =>
        @<div>
        <p>Candidato: @candidato.Id</p>
        <form class="row g-3" @onsubmit="InviaRichiestaCV">
            <div class="mb-3">
                <input type="email" class="form-control" id="txtemail" placeholder="name@example.com" required @bind="_emailRichiedente">
            </div>
            <div class="col-12">
                <button class="btn btn-primary">Invia Richiesta</button>
                <button class="btn btn-danger" @onclick="() => ds.Close(false)">Annulla</button>
            </div>
            </form>
        </div>
    );
    }

    async void InviaRichiestaCV()
    {

#pragma warning disable CS4014
        InvokeAsync(async () =>
        {
            dbContext.Richiesta.Add(new Richiesta
            {
                CandidatoId = _candidatoRichiestaCV.Id,
                EmailRichiedente = _emailRichiedente,
                Evaso = false,
                DataInserimento = DateTime.Now
            });
            dbContext.SaveChanges();

            var app = new InviaRichiesta(_emailRichiedente, _candidatoRichiestaCV);

            BusyDialog("Richiesta inviata");

            await Task.Delay(2000);

            DialogService.Close(); //Dialog richiesta e-mail
            DialogService.Close(); //Dialog Invio in Corso
            DialogService.Close(); //Dialog Richiesta Inviata
        });
#pragma warning restore CS4014

        await BusyDialog("Invio in Corso...");
    }

    async Task BusyDialog(string testo)
    {
        await DialogService.OpenAsync("", ds =>
        {
            RenderFragment content = b =>
            {
                b.OpenElement(0, "RadzenRow");

                b.OpenElement(1, "RadzenColumn");
                b.AddAttribute(2, "Size", "12");

                b.AddContent(3, testo);

                b.CloseElement();
                b.CloseElement();
            };
            return content;
        }, new DialogOptions() { ShowTitle = false, Style = "min-height:auto;min-width:auto;width:auto", CloseDialogOnEsc = false });
    }

    void RowRender(RowRenderEventArgs<Candidato> args)
    {
        args.Expandable = utente?.Username != null && args.Data.Richieste?.Count() > 0;
    }

    void RowExpand(Candidato candidato)
    {
        if (candidato.Richieste == null)
        {
            candidato.Richieste = dbContext.Richiesta.Where(o => o.CandidatoId == candidato.Id).ToList();
        }
    }

    async Task ChiudiRichiesta()
    {
        await Task.CompletedTask;
    }
}

When I Edit inline and Save, I have this error and row not update

System.InvalidOperationException: Cannot find component with Name Text
at Radzen.Blazor.ValidatorBase.ValidateModel(Object sender, ValidationRequestedEventArgs args)
at Microsoft.AspNetCore.Components.Forms.EditContext.Validate()
at Radzen.Blazor.RadzenDataGrid`1.UpdateRow(TItem item)

The Component attribute of every validator is wrong. It should be set to the Name of the component it validates.

1 Like

Yes! It's working.

Thanks.