diff --git a/StandManager/Components/Layout/MainLayout.razor b/StandManager/Components/Layout/MainLayout.razor
index 39d7ba8..ab795c3 100644
--- a/StandManager/Components/Layout/MainLayout.razor
+++ b/StandManager/Components/Layout/MainLayout.razor
@@ -66,6 +66,14 @@
Utenti
+
+
+
+
+
+ Clienti
+
+
diff --git a/StandManager/Components/Pages/Management/Clienti.razor b/StandManager/Components/Pages/Management/Clienti.razor
new file mode 100644
index 0000000..f216e83
--- /dev/null
+++ b/StandManager/Components/Pages/Management/Clienti.razor
@@ -0,0 +1,187 @@
+@page "/management/clienti"
+@using Microsoft.EntityFrameworkCore
+@using StandManager.Domain.Entita
+@using StandManager.Service.Interfaces
+@inject IManagerService _managerService
+
+Clienti
+
+
+
+@inject IManagerService _managerService
+
+Clienti
+
+@*BOZZA NEW VERSION*@
+@*
+
+
+ @* Colonna comandi con toolbar Aggiungi + pulsanti Modifica/Elimina *@
+@*
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+@code {
+ RadzenDataGrid? grid;
+
+ List clienti = new();
+ Cliente? clienteSelezionato;
+ Cliente? clienteInInserimento; // per distinguere "nuovo" da "esistente"
+
+ protected override async Task OnInitializedAsync()
+ {
+ // Prima avevi IQueryable. Ora usiamo List per gestire facilmente CRUD in memoria
+ var query = await _managerService.ClienteService.RicercaQueryable(x => x.Eliminato == false);
+ clienti = await query.ToListAsync();
+
+ clienteSelezionato = clienti.FirstOrDefault();
+ }
+
+ // ========= COMANDI UI (toolbar + pulsanti riga) ==========
+
+ async Task AddRow()
+ {
+ // crea un nuovo cliente in edit
+ clienteInInserimento = new Cliente();
+ clienti.Insert(0, clienteInInserimento);
+ await grid!.InsertRow(clienteInInserimento);
+ }
+
+ async Task EditRow(Cliente cliente)
+ {
+ clienteInInserimento = null; // non è un "nuovo", è edit di esistente
+ await grid!.EditRow(cliente);
+ }
+
+ async Task SaveRow(Cliente cliente)
+ {
+ // Chiude la modalità edit a livello UI
+ await grid!.UpdateRow(cliente);
+
+ // Persistenza su DB
+ if (clienteInInserimento == cliente)
+ {
+ // INSERIMENTO
+ // TODO: sostituisci con il tuo metodo reale
+ // await _managerService.ClienteService.Inserisci(cliente);
+ // await _managerService.UnitOfWork.SalvaAsync();
+
+ clienteInInserimento = null;
+ }
+ else
+ {
+ // UPDATE
+ // TODO: sostituisci con il tuo metodo reale
+ // await _managerService.ClienteService.Aggiorna(cliente);
+ // await _managerService.UnitOfWork.SalvaAsync();
+ }
+ }
+
+ void CancelEdit(Cliente cliente)
+ {
+ if (clienteInInserimento == cliente)
+ {
+ // se annullo l'inserimento, tolgo la riga fittizia
+ clienti.Remove(cliente);
+ clienteInInserimento = null;
+ }
+
+ grid!.CancelEditRow(cliente);
+ }
+
+ async Task DeleteRow(Cliente cliente)
+ {
+ // Persistenza su DB
+ // TODO: soft-delete o hard-delete a seconda della tua logica:
+ // cliente.Eliminato = true;
+ // await _managerService.ClienteService.Aggiorna(cliente);
+ // await _managerService.UnitOfWork.SalvaAsync();
+
+ clienti.Remove(cliente);
+ await grid!.Reload();
+ }
+}
+ *@
+
+@*OLD VERSION*@
+
+
+
+
+
+
+
+
+
+
+
+
+@code {
+ IQueryable clienti;
+ IList clientiSelected;
+
+ protected override async Task OnInitializedAsync()
+ {
+ await base.OnInitializedAsync();
+
+ clienti = await _managerService.ClienteService.RicercaQueryable(x => x.Eliminato == false);
+
+ clientiSelected = new List() { clienti.FirstOrDefault() };
+ }
+}
+
+
diff --git a/StandManager/Components/Pages/_Imports.razor b/StandManager/Components/Pages/_Imports.razor
new file mode 100644
index 0000000..e69de29