Tratando de insertar/ordenar una lista, basada en el 'Orden' valor

0

Pregunta

Estoy creando una aplicación documentación en la que me permiten a las personas dentro de mi negocio para acceder a la documentación acerca de cierto tipo de software. Con esto, tengo una página donde cualquier administrador puede gestionar categorías y usuarios. Para esto, quiero que el admin para ser capaz de cambiar el orden de una categoría en la que se debe mostrar en mi NavigationMenu. Ahora, la parte donde debe ordenar correctamente las categorías en función del Orden en el interior de la NavigationMenu obras. Pero cuando intento editar las categorías existentes y sus números de pedido, los pedidos no se actualizará en consecuencia, vea este ejemplo:

Esto es antes de la edición de las categorías existentes, estas categorías están recién agregado/hecho New categories

Esto es después de la edición de las categorías, "Reaccionar" debe ser de Orden 2, Donde API sería el Orden 0, y la Prueba sería de Orden 1 Edited categories

Como se puede ver, el orden no tiene sentido ya. Obviamente, no debería haber permitido que más de 1 de cualquier orden.

Ahora, el problema es más probable llegar a partir de este código.

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

La orden de el código va como esto:

CategoryDialog.maquinilla de afeitar

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

El código de arriba es llamado después de que se pulse un botón. Este pasa a lo largo de una categoría con un cierto número de orden, este número se pasa a lo largo de un simple menú desplegable.

El SaveCategory la función se parece a esto:

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

Esta función llama a la problemática de la función antes de guardar, agregar nada a la base de datos. Por lo que pueden tener lugar para el recién agregado o editado categoría.

Después de esto, el Evento se despidió para notificar a mi NavigationMenu que ha habido cambios realizados, y se debe volver a renderizar para mostrar esto. Este no tiene problemas.

Pero yo no puedo entender cómo me gustaría tener las Órdenes que aparecen cuando me cambie. Rápido recordatorio, esta función no funciona cuando la edición de las categorías existentes. Si que me gustaría añadir una nueva categoría, por ejemplo, en la orden 2. Se hace adecuadamente cambio de todo sin problema.

Cualquier ayuda es bienvenida!

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

Mejor respuesta

0

Entonces, si el usuario intenta realizar una segunda con decir de orden 2, se reducirá el número de orden de la que había antes?

El bucle de la lógica no admite que, debido a que el bucle está aumentando, por lo que por el momento que ocurre que ya han pasado la anterior de manera que obtendrá una doble 1 es de suponer que, después de.

Creo que voy a llegar a donde quieres si el cambio de su bucle a correr hacia abajo como su empujando hacia abajo, aunque, obviamente, usted tendrá a la orden de manutención por debajo de cero pronto y que no siempre compatibles

A:

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

Pero para que todo tiene sentido y no se ejecuta en este sugiero empujando el orden, en cambio, porque positivos altos números no tienen los mismos problemas en las esquinas, por así decirlo

O en su lugar:

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

En última instancia, también a menos que su aplicación es diferente de lo que me imagine, usted querrá agregar la nueva categoría y no todos ellos (excepto thew nuevo) nuevo

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

Yo he probado las 2 primeras soluciones, pero esto resultó en el Orden que quedan en 0 cuando la creación de nuevas categorías. No estoy muy seguro de cuál es la última solución. Pero si ayuda a "Categorías" es una lista dentro de CategoryService.cs Esta es una fuente única de la verdad, cuando GetCategories se llama, toma de nuevo la información de la base de datos.
Rowin

@Rowin la última presupone lo que desea insertar en la nueva categoría y no a toda la lista de Categorías no incluí nada acerca de la realidad de ahorro cambiado, ¿verdad? este no era su problema y que ya el maestro que. Así que, por causa yo también presumen que el orden en su categoría de parámetro ya está establecida correctamente debido a su comparación y no vemos cómo se establece. ¿Usted se propuso ya antes de llamar a SaveCategory entonces? como nosotros no manupulate el parámetro categoría, sino simplemente de añadir es la única posibilidad es que fue siempre 0?
T. Nielsen

El valor de la Orden viene de un menú desplegable, en el que U puede seleccionar a partir de la 0 a la cantidad actual de categorías, o a la hora de crear uno, 0 a la cantidad actual de categorías + 1. Es que se pasa SaveCategory. Lo que estoy tratando de hacer ahora, es crear una "Nueva lista". Donde todo se desplaza hacia arriba para hacer lugar para la nueva categoría. Después de que ha de ser salvos y en realidad se agregan a la base de datos. Esto funciona bien cuando la creación de nuevas categorías, pero cuando la edición de los documentos existentes que esto no cambie, en consecuencia, permanecer en el orden correcto.
Rowin

En otros idiomas

Esta página está en otros idiomas

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