2009-08-27 8 views
0

J'ai un gridview avec une liste de catégories. Dans la base de données (MSSQL2008), la table category a un champ SortOrder (INT) NULL.Modifier le tri des éléments dans gridview - LINQToSQL

catégories Actuellement sont récupérées à l'aide:

Galleries.DataSource = From G In DB.GalleryCategories Order By G.SortOrder, G.Name 

Maintenant, ce que je dois être en mesure de faire est d'ajouter des boutons « Déplacer vers le haut » et « Déplacer vers le bas » à chaque ligne pour permettre à l'utilisateur de trier les éléments d'une manière arbitraire.

Mes pensées initiales sont les suivantes: Identifier l'ID de l'élément sélectionné. Identifier l'ID de l'élément avant/après l'élément sélectionné. Échange d'éléments identifiés dans DB SortOrders.

je serais alors faire le sortorder NOT NULL et assurez-vous qu'il est initialisée à un numéro unique

Je vous remercie des suggestions/commentaires autres sur cette approche

Un grand merci

Répondre

2

Je généralement vu faire de cette façon, et ont fait moi-même

  • SortOrder est un entier
  • chaque élément augmente de 10 (ainsi, 10,20,30,40) ou incrément approprié
  • Pour déplacer un élément vers le haut, soustraire 15
  • Pour déplacer un élément vers le bas, ajouter 15
  • Pour insérer un élément, prendre la cible et ajouter/soustraire 1
  • Appliquer une routine NormalizeSort() qui remet à zéro les valeurs à intervalles réguliers
    • 10,20, , 30,40 => 10,20, , 40,50

qui le rend tout assez simple, car l'insertion quelque chose au-dessus de quelque chose d'autre est juste:

list.Add(New Item(..., target.SortOrder +1)) 
list.NormalizeSort() 

// or 
item.SortOrder += 11, etc 

Si vous voulez faire une décimale, vous pouvez juste faire tout séquentiel et il suffit d'ajouter .1, etc à l'ordre de tri et re-normaliser à nouveau.

// Andrew

+0

J'ai fini par initialiser le champ Sort pour être égal à la clé primaire et juste l'échanger avec l'ordre de tri de l'enregistrement avant/après mais j'ai aimé l'idée de normalisation après - alors maintenant, Une fois le tri terminé, je remets le champ de tri à séquentiel. merci beaucoup – Basic

0

Je crois Galleries.AllowSorting = true; serait assez loin;)

+0

Malheureusement, dans ce cas, j'essaie de trier les données sous-jacentes afin que la modification se produise pour TOUS les utilisateurs - pas seulement celui qui affiche la page en cours. – Basic

Questions connexes