I have a datagrid where everything is being updated correctly, but after the update the new value is not displaying. All other data will change and display, this is only with dropdownlist values.
Page:
@page "/projecttasks/{ieId:int}"
@inject IProjectTaskService ProjectTaskService
@inject IJSRuntime JsRuntime
Projects
<RadzenDataGrid @ref="_projectGrid" GridLines="DataGridGridLines.Both" AllowAlternatingRows="true" AllowFiltering="true" FilterMode="FilterMode.Simple"
FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive" AllowPaging="true" PageSize="12" AllowSorting="true" AllowColumnResize="true"
EditMode="DataGridEditMode.Single" Data="@_projectTasks" TItem="ProjectTask" RowUpdate="@OnUpdateRow"
Sort="@Reset" Page="@Reset" Filter="@Reset" Density="Density.Compact">
<Columns>
<RadzenDataGridColumn Width="150px" TItem="ProjectTask" Property="ProjectStatus.Name" Title="Project Status">
<Template Context="projectTask">
<span style='color: white'>@projectTask.ProjectStatus?.Name</span>
</Template>
<EditTemplate Context="projectTask">
<RadzenDropDown @bind-Value="projectTask.ProjectStatusId" Data="@_projectStatuses" ValueProperty="Id" TextProperty="Name" Style="display: block; width: 100%;"/>
</EditTemplate>
</RadzenDataGridColumn>
</Columns>
</RadzenDataGrid>
@code {
[Parameter]
public int ieId { get; set; }
RadzenDataGrid<ProjectTask> _projectGrid;
List<ProjectTask> _projectTasks;
List<ProjectStatus> _projectStatuses;
ProjectTask _taskToInsert;
ProjectTask _taskToUpdate;
void Reset()
{
_taskToInsert = null;
_taskToUpdate = null;
}
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
_projectStatuses = await ProjectTaskService.GetProjectStatusesForForm();
await ProjectTaskService.GetProjectTasks(ieId);
_projectTasks = ProjectTaskService.ProjectTasks;
}
public async Task EditRow(ProjectTask projectTask)
{
_taskToUpdate = projectTask;
await _projectGrid.EditRow(projectTask);
}
public async void OnUpdateRow(ProjectTask projectTask)
{
Reset();
await ProjectTaskService.UpdateProjectTask(projectTask);
}
public async Task SaveRow(ProjectTask projectTask)
{
await _projectGrid.UpdateRow(projectTask);
}
}
Service:
using Microsoft.EntityFrameworkCore;
using ToDoList.Shared;
using ToDoList.Shared.Models;
namespace ToDoList.Server.Services.ProjectTaskService
{
public class ProjectTaskService : IProjectTaskService
{
private readonly ToDoContext _context;
public ProjectTaskService(ToDoContext context)
{
_context = context;
}
public async Task<ServiceResponse<List<ProjectTask>>> GetProjectTasksAsync(int ieId)
{
var projectTask = await _context.ProjectTasks
.Include(d => d.DailyStatus)
.Include(p => p.ProjectStatus)
.Where(i => i.DsIeId == ieId)
.OrderBy(f => f.FiNumber)
.ToListAsync();
return new ServiceResponse<List<ProjectTask>>
{
Data = projectTask
};
}
public async Task<ServiceResponse<ProjectTask>> GeProjectTaskAsync(int id)
{
var response = new ServiceResponse<ProjectTask>();
var projectTask = await _context.ProjectTasks
.FirstOrDefaultAsync(t => t.Id == id);
if (projectTask == null)
{
response.Success = false;
response.Message = "Task does not exist.";
}
else
{
response.Data = projectTask;
}
return response;
}
public async Task<ServiceResponse<List<ProjectTask>>> UpdateProjectTaskAsync(ProjectTask projectTask)
{
var dbProjectTask = await GetProjectTaskById(projectTask.Id);
dbProjectTask.Name = projectTask.Name;
dbProjectTask.CaseNumber = projectTask.CaseNumber;
dbProjectTask.Notes = projectTask.Notes;
dbProjectTask.HdServer = projectTask.HdServer;
dbProjectTask.Hours = projectTask.Hours;
dbProjectTask.FiNumber = projectTask.FiNumber;
dbProjectTask.FiName = projectTask.FiName;
dbProjectTask.DsIeId = projectTask.DsIeId;
dbProjectTask.DailyStatusId = projectTask.DailyStatusId;
dbProjectTask.ProjectStatusId = projectTask.ProjectStatusId;
await _context.SaveChangesAsync();
return await GetProjectTasksAsync(projectTask.DsIeId);
}
private async Task<ProjectTask> GetProjectTaskById(int id)
{
return await _context.ProjectTasks
.FirstOrDefaultAsync(i => i.Id == id);
}
}
}
Controller:
using ToDoList.Shared;
using ToDoList.Shared.Models;
namespace ToDoList.Client.Services.ProjectTaskService
{
public class ProjectTaskService : IProjectTaskService
{
private readonly HttpClient _httpClient;
public ProjectTaskService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public event Action? ProjectTaskChanged;
public List<ProjectTask> ProjectTasks { get; set; } = new();
public string Message { get; set; } = "Loading Projects...";
public async Task GetProjectTasks(int ieId)
{
var response = await _httpClient.GetFromJsonAsync<ServiceResponse<List<ProjectTask>>>($"api/projecttask/{ieId}");
if (response is { Data: { } })
ProjectTasks = response.Data;
ProjectTaskChanged?.Invoke();
}
public async Task<List<ProjectStatus>> GetProjectStatusesForForm()
{
List<ProjectStatus> projectStatuses = new();
var response = await _httpClient.GetFromJsonAsync<ServiceResponse<List<ProjectStatus>>>("api/projectstatus");
if (response is { Data: { } })
projectStatuses = response.Data;
return projectStatuses;
}
public async Task UpdateProjectTask(ProjectTask projectTask)
{
var response = await _httpClient.PutAsJsonAsync("api/projecttask", projectTask);
ProjectTasks = (await response.Content
.ReadFromJsonAsync<ServiceResponse<List<ProjectTask>>>()).Data;
}
}
}