Question

La meilleure façon de permettre à l'utilisateur de définir un ordre de tableau?

Nous utilisons SQL Server 2005 et les contrôles DevExpress.

Nous avons une table qui contient les éléments suivants:

  1. Processus A
  2. Processus B
  3. Processus C
  4. Rapport A
  5. Rapport B
  6. Rapport C

Nous voulons permettre à l'utilisateur de changer l'ordre de tout ce qu'ils veulent.

Voici un exemple:

  1. Processus C
  2. Processus A
  3. Processus B
  4. Rapport B
  5. Rapport A
  6. Rapport C

Pour accueillir ce, nous avons ajouté un champ displayorder (INT) à la table qui est maintainted par la notre application.

utilise un champ INT la meilleure solution pour un ordre défini par l'utilisateur?

Y at-il d'autres méthodes pour y parvenir?

La raison, je vous demande, est dans notre application actuelle, il faut environ 1 seconde pour déplacer une ligne vers le bas (ou vers le haut). Je suis sur le point de se fissurer ouvrir le code pour voir pourquoi il est si long et si vous empilez les gourous de débordement ont de bonnes idées, je pourrais les mettre en œuvre à ce moment-là.

Si vous êtes curieux, voici comment je crois que notre application permet l'édition du displayorder:

  1. Chargez la table dans un GridView
  2. Sélectionnez une ligne
  3. En cliquant sur un bouton Déplacer vers le bas (il y a aussi un bouton Move Up)
  4. L'événement Click échangera displayorder de la ligne en cours avec la ligne en dessous.
  5. Le changement, à la fois des dossiers, sont réécrites dans la base de données
  6. Cela prend environ 1 seconde par clic (à savoir 10 clics égale à 10 secondes)
Était-ce utile?

La solution

Pourrait-il être pris 1 seconde par échange parce que vous mettez à jour la base de données à chaque clic? Peut-être même resélectionner à nouveau les données aussi?

Pourquoi ne pas sélectionner les données dans des objets locaux. Se lier à ces objets dans la grille. Lorsque vous déplacez les objets AUGMENTER et en bas de leur propriété ordre d'affichage. Alors seulement faire une mise à jour du DB

  1. Lorsque l'utilisateur clique enfin sur Enregistrer.
  2. Si l'une des valeurs de l'objet ont changé.

Autres conseils

Je propose la décision dans l'enregistrement d'un bouton explicite Enregistrer le réordonnancement parce que l'utilisateur peut changer d'avis et, comme Peter Morris suggère, cela obtenir après vos problèmes de performance.

D'autres choses à considérer -. Explicite Déplacer vers le haut et Déplacer vers les éléments de fond

Je mis en œuvre une interface utilisateur très réussie en utilisant ce type d'approche pour la sélection axée sur l'utilisateur des éléments de recherche et des éléments de rapports, dans un système d'entreprise. Plus de détails sur l'interface utilisateur sont disponibles pour vous de voir (être gentil, rappelez-vous il est environ 15 ans - retour en jours mono plats!). Un raffinement clé d'un grand nombre de tests utilisateurs - le sweet spot pour sauver cet ordre n'a pas été par utilisateur ou par-entreprise, mais par groupe. Les groupes étaient les gens qui travaillent ensemble qui avaient une même page de démarrage (essentiellement la même racine dans un graphique massivement connecté). Nous avons eu environ 7 groupes uniques dans l'organisation.

Alors, si vous optez pour une approche, vous devez retirer les données de tri par utilisateur ou par groupe dans une table séparée qui mappe les clés de données en nombres entiers ordinaux.

Si vous zone parle d'un ordre d'affichage que l'utilisateur veut établir et maintenir, qui doit être dans une table séparée avec l'ID utilisateur et les IDs des dossiers qu'il veut voir et une colonne d'ordre d'affichage. Ensuite, la requête qui récupère les données à cette page se USEA joindre à la table des préférences de l'utilisateur.

Si vous souhaitez définir simplement l'ordre temporaily pour le moment où la personne est à la recherche à l'écran, faites-le répercutant l'interface utilisateur.

En tout état de cause ne réordonner pas les enregistrements de la table de base, qui est un mauvais choix que vous courrez dans des conditions de course où un utilisateur souhaite un réglage et l'utilisateur b INTHE temps tente de passer à un paramètre differnt.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top