J'ai une table de base de données qui a une colonne entière SortOrder. Dans l'interface utilisateur pour l'ajout et la modification d'éléments de table, j'ai une liste déroulante d'Integer qui permet à l'utilisateur de sélectionner l'endroit où il souhaite que cet élément apparaisse dans le tri. Ma question est, disons la liste, {1,2,3,4,5, "dernier"}, si l'utilisateur choisit un nombre, je veux que ce soit l'attribut SortOrder des éléments, puis l'élément avec ce 'SortOrder' Actuellement, il y en aurait un (+ = 1) ainsi que les objets avec un SortOrder plus élevé sans affecter les objets avec un SortOrder plus bas. J'ai actuellement un module public 'Utilities' en utilisant VB.NET et LINQMeilleure pratique pour renuméroter les éléments d'une liste? SQL ou C#/VB.NET
_db Private As New MyDataContext
Public Sub UpdateProductSortOrder(ByVal idx As Integer)
Dim products = (From p As Product In _db.Products _
Where p.SortOrder >= idx _
Select p).ToList()
For Each p As Product In products
p.SortOrder += 1
Next
_db.SubmitChanges()
End Sub
Il semble bien fonctionner lorsque l'ajout d'éléments que je fais ce
Protected Overrides Sub AddItem()
Dim sortOrder As Integer = Int32.Parse(Server.HtmlEncode(ddlNewSortOrder.SelectedValue))
If (sortOrder >= 1) Then
Utilities.UpdateProductSortOrder(sortOrder)
Else
sortOrder = Utilities.GetNextProductSortOrder()
End If
Dim dic As New System.Collections.Specialized.ListDictionary()
dic.Add("PROD_Description", Server.HtmlEncode(txtNewDescription.Text))
dic.Add("Abbrev", Server.HtmlEncode(txtNewAbbreviation.Text.ToUpper()))
dic.Add("SortOrder", sortOrder)
ProductsGridSource.Insert(dic)
End Sub
Mais je reçois des erreurs occasionnelles lors de l'édition des articles comme celui-ci exisitng
protégé Sous ProductsGridSource_Updating (expéditeur de ByVal comme objet, par Val e Comme System.Web.UI.WebControls.LinqDataSourceUpdateEventArgs) Dim sortOrder As Integer = DirectCast (e.NewObject, produit) .SortOrder Utilities.UpdateProductSortOrder (sortOrder) End Sub
Y at-il un plus effecient peut-être, meilleure pratique, comme je devrais le faire? Tout conseil est apprécié.
Merci à l'avance, ~ ck à San Diego
J'aime cette approche. Oui, je peux voir le problème avec le mien. Je change des valeurs qui ne doivent pas être changées en ajoutant juste 1 à tout. Comment puis-je l'implémenter efficacement avec Linq? – Hcabnettek