Cercando di inserire ordinamento di un elenco basato su 'Ordine' valore

0

Domanda

Io sono la creazione di una documentazione di applicazione in cui ho permettere alle persone all'interno del mio business per accedere alla documentazione relativa a determinati software. Con questo, ho una pagina in cui ogni amministratore può gestire le categorie e gli utenti. Per questo, voglio admin per essere in grado di modificare l'ordine di una categoria in cui deve essere visualizzato sul mio NavigationMenu. Ora, la parte dove dovrebbe ordinare correttamente le categorie sulla base di un Ordine all'interno del NavigationMenu opere. Ma quando cerco di modificare le attuali categorie e i loro numeri d'ordine, gli ordini non si aggiorna di conseguenza, vedi questo esempio:

Questa è la prima modifica categorie esistenti, queste categorie sono appena aggiunto/fatto New categories

Questo è dopo la modifica categorie, "Reagire" dovrebbe essere di Ordine 2, Dove le API sarebbero Ordine di 0, e la Prova sarebbe di Ordine 1 Edited categories

Come si può vedere, l'ordine non ha più senso. Ovviamente, non dovrebbe essere consentito più di 1 di qualsiasi ordine.

Ora, il problema è più probabile che da questo codice.

CategoryService.cs

public async Task<List<Category>> InsertCategory(Category category)
        {
            await GetCategories();
            for (int i = 0; i < Categories.Where(c => c.Order >= category.Order).Count(); i++)
            {
                Categories[i].Order++;

                if (Categories[i].Order == category.Order)
                {
                    Categories[i].Order--;
                    break;
                }
            }

            await categoryRepository.InsertAsync(Categories);
            EventHelper.NotifyCategoryListChanged(Categories, EventArgs.Empty);
            return Categories;
        }

L'ordine del codice va come questa:

CategoryDialog.rasoio

private async void SaveCategory(Category category)
    {
        if(!string.IsNullOrEmpty(category.Name))
        {
            await categoryService.SaveCategory(category);
            Snackbar.Add("Category " + category.Name + " added", Severity.Success);
            MudDialog.Close(DialogResult.Ok(category.Id));       
        }
        else
        {
            Snackbar.Add("Please enter a category name.", Severity.Warning);
        }
    }

Il codice sopra è chiamato dopo aver premuto il pulsante. Questo passa lungo una categoria con un certo numero di ordine, questo numero si passava da un semplice menu a discesa.

Il SaveCategory funzione simile a questo:

CategorySerice.cs

public async Task<Category> SaveCategory(Category category)
        {
            await InsertCategory(category);

            if (categoryRepository.GetByIdAsync(category.Id) == null)
            {
                await categoryRepository.AddAsync(category);
            }
            else
            {
                await categoryRepository.SaveAsync(category);
            }

            EventHelper.NotifyCategoryListChanged(Categories, EventArgs.Empty);

            return category;
        }

Questa funzione chiama la problematica funzione prima di salvare/aggiungere nulla al database. Così può prendere posto per la nuova aggiunta o la modifica di categoria.

Dopo questo, un Evento viene licenziato per confermare la mia NavigationMenu che ci sono stati dei cambiamenti, e questo dovrebbe re-rendering per mostrare questo. Questo non ha problemi.

Ma io non riesco a capire come avrei correttamente gli Ordini essere elencati, quando io li cambio. Breve promemoria, questa funzione non funziona quando si modifica categorie esistenti. E se volessi aggiungere una nuova categoria, per esempio, all'ordine 2. Lo fa correttamente spostamento di tutto senza alcun problema.

Qualsiasi aiuto è benvenuto!

.net c# entity-framework
2021-11-23 11:52:48
1

Migliore risposta

0

Quindi, se l'utente tenta di effettuare una seconda, ad esempio di ordine 2, si riduce il numero di ordine di quello che era prima?

Il ciclo di logica non di supporto, perché il ciclo è in aumento in modo da il caso che hai già superato il precedente, in modo da otterrete un doppio 1, presumibilmente, dopo.

Penso che avrai in cui si desidera se il vostro cambiamento di ciclo per eseguire verso il basso come il tuo si spinge verso il basso, anche se, ovviamente, dovrete sostenere ordine sotto lo zero presto e che non sempre è supportato

A:

for (int i = Categories.Count() -1; i >-1; i--)
{
    if (Categories[i].Order <= category.Order)
    {
        Categories[i].Order = Categories[i].Order--;
    }
}

Ma per tutto per dare un senso e non in esecuzione per questo suggerisco di spingere l'ordine, invece, a causa positivi i numeri alti non hanno gli stessi problemi negli angoli per così dire

O invece:

for (int i = 0; i < Categories.Count(); i++)
{
    if(Categories[i].Order < category.Order) continue;
    Categories[i].Order = Categories[i].Order++;
}

In definitiva, a meno che l'implementazione è diversa immagino, si desidera aggiungere una nuova categoria, e non tutti (esclusi thew nuovo) nuovo

--FROM: await categoryRepository.InsertAsync(Categories);
--TO:
await categoryRepository.InsertAsync(category);
2021-11-23 12:22:15

Ho provato le prime 2 soluzioni, ma questo ha provocato in Ordine rimanendo a 0 quando la creazione di nuove categorie. Io non sono davvero sicuro di quello che l'ultima soluzione. Ma se aiuta a "Categorie" è un elenco all'interno CategoryService.cs Questa è una singola fonte di verità, quando GetCategories viene chiamato, afferra nuove informazioni dal database.
Rowin

@Rowin l'ultimo presuppone che si desidera inserire nella nuova categoria e non l'intero elenco di Categorie io non comprendono nulla, in realtà il risparmio è cambiato, giusto? questo non era il problema e già master. Così di causare anche io presumo l'ordine nella vostra categoria parametro è già impostato correttamente a causa di un tuo confronto e non vediamo come è impostato. Hai dato già prima di chiamare SaveCategory poi? come non manupulate il parametro di categoria, ma semplicemente aggiungere è l'unica possibilità è che era sempre 0?
T. Nielsen

Il valore da Ordine proviene da un menu a discesa, in cui U possibile selezionare da 0 a corrente di quantità di categorie, o quando la creazione, da 0 a corrente di quantità di categorie + 1. Viene passato insieme a SaveCategory. Quello che sto cercando di fare ora, è di creare una "Nuova" lista. Dove tutto è spostato verso l'alto per fare posto alla nuova categoria. Dopo di che è di essere salvato, e effettivamente aggiunto al database. Questo funziona bene quando la creazione di nuove categorie, ma quando modifica i documenti esistenti questo non salire di conseguenza per rimanere nell'ordine corretto.
Rowin

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................