我有一个具有 SortOrder 整数列的数据库表。在用于添加和编辑表格项目的 UI 中,我有一个整数下拉列表,让用户选择他们希望该项目出现在排序顺序中的哪个位置。我的问题是,比如说列表 {1,2,3,4,5,"last"},如果用户选择一个数字,我希望它是 items SortOrder 属性,然后是具有该“SortOrder”的项目当前将增加一个(+ = 1)以及具有较高“SortOrder”的项目,同时不影响具有较低“SortOrder”的项目。我目前有一个使用 VB.NET 和 Linq 的公共模块“实用程序”
私有 _db 作为新的 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
在我这样做时添加项目似乎工作正常
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
但是在编辑这样的现有项目时,我偶尔会遇到一些错误
Protected Sub ProductsGridSource_Updating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LinqDataSourceUpdateEventArgs) Dim sortOrder As Integer = DirectCast(e.NewObject, Product).SortOrder Utilities.UpdateProductSortOrder(sortOrder) End Sub
是否有更有效的最佳实践方式,我应该这样做?任何建议表示赞赏。
提前致谢,~ck 在圣地亚哥