SortOrder整数列を持つデータベーステーブルがあります。テーブルアイテムを追加および編集するためのUIには、整数のドロップダウンリストがあり、ユーザーがこのアイテムを表示するソート順の場所を選択できるようになっています。私の質問は、リスト{1,2,3,4,5、 "last"}と言います。ユーザーが番号を選択した場合、それをアイテムのSortOrder属性にし、次にその'SortOrder'を持つアイテムにします。現在、「SortOrder」が低いアイテムには影響を与えずに、「SortOrder」が高いアイテムと同様に1つ(+ = 1)バンプされます。私は現在、VB.NETとLinqを使用するパブリックモジュール「ユーティリティ」を持っています
新しいMyDataContextとしてのPrivate_db
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