Snaží sa vložiť/zoradiť zoznam založený na "Príkaz" hodnota

0

Otázka

Ja som vytváranie dokumentácie aplikáciu, v ktorej som, aby ľudia vo vnútri môjho podnikania na prístup k dokumentácii o určitý softvér. S týmto som stránku, kde všetky admin môžete spravovať kategórie a užívateľov. Pre toto, chcem admin, aby ste mohli zmeniť poradie kategórie, v ktorých by mali byť zobrazené na mojom NavigationMenu. Teraz, v časti, kde by mal správne poradie kategórií na základe Objednávky vo vnútri NavigationMenu funguje. Ale keď som sa pokúsiť upraviť existujúce kategórie a ich poradie čísla objednávky, nebude aktualizovať podľa toho, pozri tento príklad:

Toto je pred úpravou existujúcich kategórií, tieto kategórie sú čerstvo pridal/vyrobené New categories

To je po úprave kategórie,, "Reagovať" treba Objednať 2, Kde API by Poradí 0, a Test by byť Poriadok 1 Edited categories

Ako môžete vidieť, aby nemá zmysel už. Samozrejme, tam by nemali byť povolené viac ako 1 z každej objednávke.

Teraz, problém je pravdepodobne pochádzajúce z tohto kódexu.

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

Poradie kód vyzerá takto:

CategoryDialog.britva

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

Vyššie uvedený kód je volaná po tlačidlo stlačte tlačidlo. Tento prechádza pozdĺž kategórie s určitom poradí číslo, toto číslo sa dostane vyplavujú z jednoduchého roletového menu.

Na SaveCategory funkcie vyzerá takto:

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

Táto funkcia vyžaduje problematické funkcia predtým, než v skutočnosti uloženie/pridaním nič databázy. Takže to môže trvať miesto pre novo pridané alebo upravené kategórie.

Po tomto, Udalosť, dostane padáka oznámiť môj NavigationMenu, že tam boli zmeny vykonané, a to by re-render to dokázať. To nemá žiadne problémy.

Ale nemôžem prísť na to, ako by som správne mať Objednávky byť uvedené keď som ich zmeniť. Rýchle upomienku, táto funkcia nefunguje pri úprave existujúcich kategórií. Ak by som pridať novú kategóriu, napríklad na objednávku 2. To robí správne shift všetko bez problémov.

Každá pomoc je vítaná!

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

Najlepšiu odpoveď

0

Takže ak používateľ pokúsi urobiť druhý povedať, aby 2, zníži objednávky číslo jeden, ktorý bol predtým?

Vaša uložená slučka logika nepodporuje, že vaša uložená slučka sa zvyšuje, takže do času, keď sa to stane ste už absolvovali predchádzajúci, takže budete mať dvojité 1 možno predpokladať, po.

Myslím si, dostať tam, kam chcete, ak sa vaše zmeny vašu slučku spustiť nadol, ako váš tlačí dole, aj keď, samozrejme, budete mať podporu, aby pod nulu skoro, a že nie vždy podporuje

K:

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

Ale pre všetko zmysel, a nie je spustený v tejto navrhujem tlačí aby sa namiesto toho, pretože pozitívne vysoké čísla nemajú rovnaké problémy v rohoch tak, aby hovoria

Alebo namiesto:

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

V konečnom dôsledku tiež, pokiaľ v implementácii je iný, ako som si predstaviť, že budete chcieť skutočne chcete pridať nové kategórie a nie všetky z nich (s výnimkou thew nové) znova

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

Snažil som sa v prvých 2 riešenia, ale to vyústilo v Poradí, zostávajúcich na 0 pri vytváraní nových kategórií. Nie som si úplne istý, čo posledné riešenie nemá. Ale či to pomôže "Kategórie" je zoznam vnútri CategoryService.cs Toto je jediný zdroj pravdy, keď GetCategories dostane názov, to chytí nové informácie z databázy.
Rowin

@Rowin posledný predpokladá sa, čo chcete vložiť do novej kategórie, a nie celý zoznam Kategórií som nemal obsahovať nič o skutočnosti ukladanie zmenilo, však? to nie je váš problém a vy už zvládnuť to. Tak spôsobiť som tiež predpokladať objednávky vo svojej kategórii parameter je už správne nastaviť vzhľadom na vaše porovnávanie a nechceme vidieť, ako je nastavená. Urobil si to už pred zavolaním SaveCategory potom? ako sme nie manupulate parameter kategórie, ale jednoducho ho pridať ako je len možné, je vždy to bolo 0?
T. Nielsen

Hodnota od Objednávky pochádza z rozbaľovacieho menu, v ktorej U môžete vybrať z 0 na aktuálne množstvo kategórií, alebo pri vytváraní jeden, 0 aktuálneho množstva kategórií + 1. To je adresovaný SaveCategory. To, čo sa snažím robiť teraz, je vytvoriť "Novú" zoznam. Kde všetko, čo sa posunie nahor, aby miesto pre novú kategóriu. Po tom, čo je to byť uložené a vlastne pridaný do databázy. To funguje pri vytváraní nových kategórií, ale pri úprave existujúcich dokumentov, nemá to žiadny posun nahor preto, aby zostali v správnom poradí.
Rowin

V iných jazykoch

Táto stránka je v iných jazykoch

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