From e3e13a08cf8ac658a986abdd4770a9ea1fbfb981 Mon Sep 17 00:00:00 2001 From: Peace Date: Fri, 28 Jun 2024 16:04:08 +0900 Subject: [PATCH] datagrid inline-editing --- .../Components/Layout/NavMenu.razor | 6 + .../Components/Pages/DataGridEdit.razor | 185 ++++++++++++++++++ 2 files changed, 191 insertions(+) create mode 100644 ComponentPractice/ComponentPractice/Components/Pages/DataGridEdit.razor diff --git a/ComponentPractice/ComponentPractice/Components/Layout/NavMenu.razor b/ComponentPractice/ComponentPractice/Components/Layout/NavMenu.razor index 5ba6723..369368a 100644 --- a/ComponentPractice/ComponentPractice/Components/Layout/NavMenu.razor +++ b/ComponentPractice/ComponentPractice/Components/Layout/NavMenu.razor @@ -67,6 +67,12 @@   DataGrid REST + + diff --git a/ComponentPractice/ComponentPractice/Components/Pages/DataGridEdit.razor b/ComponentPractice/ComponentPractice/Components/Pages/DataGridEdit.razor new file mode 100644 index 0000000..355e28a --- /dev/null +++ b/ComponentPractice/ComponentPractice/Components/Pages/DataGridEdit.razor @@ -0,0 +1,185 @@ +@page "/datagridedit" +@using System.Linq.Dynamic.Core + +@inject InMemoryData data; + +@rendermode RenderMode.InteractiveServer + + + + + DataGrid InLine Editing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@code { + RadzenDataGrid grid; + List employees; + bool isLoading = false; + + List titles = new List { "Junior", "Mid", "Senior", "Lead", "Chief" }; + IEnumerable selectedTitles; + + List employeesToInsert = new List(); + List employeesToUpdate = new List(); + + protected async override Task OnInitializedAsync() + { + isLoading = true; + + await Task.Yield(); + + employees = await data.GetEmployeeDataAsync(5); + + isLoading = false; + } + + async Task OnSelectedTitlesChange(object value) + { + if (selectedTitles != null && !selectedTitles.Any()) + selectedTitles = null; + + await grid.FirstPage(); + } + + async Task Reset() + { + grid.Reset(true); + await grid.FirstPage(true); + + employeesToInsert.Clear(); + employeesToUpdate.Clear(); + } + + async Task Reset(Employee employee) + { + employeesToInsert.Remove(employee); + employeesToUpdate.Remove(employee); + } + + async Task InsertRow() + { + var employee = new Employee(); + employeesToInsert.Add(employee); + await grid.InsertRow(employee); + } + + async Task EditRow(Employee employee) + { + if (employeesToInsert.Count > 0) + Reset(); + + employeesToUpdate.Add(employee); + await grid.EditRow(employee); + } + + async Task CancelEdit(Employee employee) + { + Reset(employee); + + grid.CancelEditRow(employee); + } + + async Task DeleteRow(Employee employee) + { + Reset(employee); + + if (employees.Contains(employee)) + employees.Remove(employee); + else + grid.CancelEditRow(employee); + + + await grid.Reload(); + } + + async Task SaveRow(Employee employee) + { + await grid.UpdateRow(employee); + } + + void OnCreateRow(Employee employee) + { + employees.Add(employee); + + employeesToInsert.Remove(employee); + } + + void OnUpdateRow(Employee employee) + { + Reset(employee); + + var found = employees.Where(e => e.ID == employee.ID).FirstOrDefault(); + if (found is null) + return; + + found = employee; + } +} +