Datagrid issue

Hi,

I am trying to implement Radzen DataGrid in Visual studio. The table data is populating but I switching from single to multiple or Add new row or edit none are working. Can someone suggest whats wrong?

Radzen version installed:5.3.1
Here is my code:
public class EmpTable
{
public int ID { get; set; }

	public string? Project { get; set; }
	public string? Activity { get; set; }

	public decimal Percent { get; set; }

	
}

//this is the view for Project Dropdown
public class VProjectActivity
{
public string? Project { get; set; }
public string? Activity { get; set; }

}

Databasecontext

namespace emp.Components.Data
{
public partial class DatabaseContext : DbContext
{
public DatabaseContext()
{
}
public DatabaseContext(DbContextOptions options)
: base(options)
{
}

    public DbSet<EmpTable> EmpTable { get; set; }
    
    public DbSet<VProjectActivity> VProjectActivities { get; set; }
    
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        
       
        modelBuilder.Entity<EmpTable>(entity =>
        {
            entity.ToTable("EmpTable");
            entity.Property(e => e.ID).HasColumnName("ID");              
            
            entity.Property(e => e.Activity)
                    .HasMaxLength(50)
                    .IsUnicode(false);
            entity.Property(e => e.Project)
                    .HasMaxLength(50)
                    .IsUnicode(false);
            
            entity.Property(e => e.Percent)
                     .HasMaxLength(50)
                     .IsUnicode(false);

        });
       
        
  
        modelBuilder.Entity<VProjectActivity>(entity =>
        {
            entity.ToTable("VProjectActivity");
            entity.HasNoKey();
            entity.Property(e => e.Project)
                    .HasMaxLength(100)
                    .IsUnicode(false);
            entity.Property(e => e.Activity)
                    .HasMaxLength(100)
                    .IsUnicode(false);

        });
        OnModelCreatingPartial(modelBuilder);
    }


    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);

//Added the below two procedures based on Radzen source code

    public async Task SeedAsync()
    {
        try
        {
            AddData();

            if (ChangeTracker.HasChanges())
            {
                await SaveChangesAsync();
            }
        }
        catch
        {
            //
        }
    }
    public void AddData()
    {
        var e = new List<EmpTable>();
        if (!e.Any())
        {
            e.AddRange(e);
        }


    }
}

}

DBContextPage.razor.cs //added this based on Radzen code

using Microsoft.AspNetCore.Components;
using Microsoft.EntityFrameworkCore;

namespace Components.Shared
{
public partial class DbContextPage : ComponentBase
{
[Inject]
public IDbContextFactory DbFactory { get; set; }

    protected DatabaseContext dbContext;

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

        if (dbContext == null)
        {
            dbContext = await DbFactory.CreateDbContextAsync();
            await dbContext.SeedAsync();
        }
    }
}

}

///Page Code

@page "/AddDefault"
@inherits DbContextPage
@using Microsoft.EntityFrameworkCore

.rz-grid-table { width: unset; }
Edit Mode:
<Columns>
    <RadzenDataGridColumn Property="LineNo" Title="ID" Width="120px" Frozen="true" />
    <RadzenDataGridColumn Property="VProjectActivity.Project" Title="Project" Width="280px">
        <EditTemplate Context="emp">
            <RadzenDropDown @bind-Value="emp.Project" Data="@project" TextProperty="@nameof(VProjectActivity.Project)"
                            ValueProperty="@nameof(VProjectActivity.Project)" Style="width:100%; display: block;"
                            InputAttributes="@(new Dictionary<string,object>(){ { "aria-label", "Select project" }})" />
        </EditTemplate>
    </RadzenDataGridColumn>
    <RadzenDataGridColumn Property="@nameof(EmpTable.Activity)" Title="Activity" Width="200px">
        <EditTemplate Context="emp">
            <RadzenDropDown @bind-Value="emp.Activity" Data="@project" TextProperty="@nameof(VProjectActivity.Activity)"
                            ValueProperty="@nameof(VProjectActivity.Activity)" Style="width:100%; display: block;"
                            InputAttributes="@(new Dictionary<string,object>(){ { "aria-label", "Select activity" }})" />
        </EditTemplate>
    </RadzenDataGridColumn>

    <RadzenDataGridColumn Context="emp" Filterable="false" Sortable="false" TextAlign="TextAlign.Right" Frozen="true" FrozenPosition="FrozenColumnPosition.Right">
        <Template Context="emp">
            <RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@(args => EditRow(emp))" @onclick:stopPropagation="true">
            </RadzenButton>
            <RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="rz-my-1 rz-ms-1" Click="@(args => DeleteRow(emp))" @onclick:stopPropagation="true">
            </RadzenButton>
        </Template>
        <EditTemplate Context="emp">
            <RadzenButton Icon="check" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@((args) => SaveRow(emp))" aria-label="Save">
            </RadzenButton>
            <RadzenButton Icon="close" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" class="rz-my-1 rz-ms-1" Click="@((args) => CancelEdit(emp))" aria-label="Cancel">
            </RadzenButton>
            <RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="rz-my-1 rz-ms-1" Click="@(args => DeleteRow(emp))" aria-label="Delete">
            </RadzenButton>
        </EditTemplate>
    </RadzenDataGridColumn>

</Columns>

@code {
RadzenDataGrid<EmpTable?> empGrid;
IEnumerable<EmpTable?> emps;
IList<EmpTable?> emps1 { get; set; }
IEnumerable project;
IEnumerable rptS;

DataGridEditMode editMode = DataGridEditMode.Single;

List<EmpTable> empsToInsert = new List<EmpTable>();
List<EmpTable> empsToUpdate = new List<EmpTable>();


void Reset()
{
    empsToInsert.Clear();
    empsToUpdate.Clear();
}

void Reset(EmpTable emp)
{
    empsToInsert.Remove(emp);
    empsToUpdate.Remove(emp);
}

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


    project = dbContext.VProjectActivities;

    // customers = dbContext.Customers;
    // employees = dbContext.Employees;

    emps = dbContext.EmpTable;//.Include("Project").Include("Employee");
}



async Task EditRow(EmpTable order)
{
    if (editMode == DataGridEditMode.Single && empsToInsert.Count() > 0)
    {
        Reset();
    }

    empsToUpdate.Add(order);
    await empGrid.EditRow(order);
}

void OnUpdateRow(EmpTable order)
{
    Reset(order);

    dbContext.Update(order);

    dbContext.SaveChanges();
}
async Task SaveRow(EmpTable emp)
{
    await empGrid.UpdateRow(emp);
}

void CancelEdit(EmpTable order)
{
    Reset(order);

    empGrid.CancelEditRow(order);

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

async Task DeleteRow(EmpTable order)
{
    Reset(order);

    if (emps.Contains(order))
    {
        dbContext.Remove<EmpTable>(order);

        dbContext.SaveChanges();

        await empGrid.Reload();
    }
    else
    {
        empGrid.CancelEditRow(order);
        await empGrid.Reload();
    }
}

private async Task InsertRow()
{
    if (editMode == DataGridEditMode.Single)
    {
        Reset();
    }

    var order = new EmpTable();
    empsToInsert.Add(order);
    
    await empGrid.InsertRow(order);
}

void OnCreateRow(EmpTable order)
{
    dbContext.Add(order);

    dbContext.SaveChanges();

    empsToInsert.Remove(order);
}

}

Hi @Neverletitdown,

Does any interactive feature (paging, sorting etc) of RadzenDataGrid work? If not then probably you need to enable interactivity for the containing page. Then I suggest to simplify things. You don't need DBContextPage or to seed data - we are using it for demo purposes only.

I have
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
app.MapRazorComponents()
.AddInteractiveServerRenderMode();
already in program.cs file already still interactive feature is not working

You need to make sure the render mode is set in the page itself. Check the documentation for more info: ASP.NET Core Blazor render modes | Microsoft Learn