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
<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);
}
}