2009-12-09 48 views
2

我的客戶想要通過拖放&拖放來排序產品。使用javascript可輕鬆拖動&拖放部分。在SQL Server中保存並獲取任意排序順序

我的問題是如何保存並獲取排序順序?

我使用.NET C#和SQL Server 2008

當我移動產品,並在新的位置,我得到多數民衆贊成移動產品的ID,產品的正面和產品背後放棄它。有了這些數據,我想更新產品的排序順序。

我在考慮添加一個帶位置的字段,但是我想我必須在位置更改時更新每個項目。

回答

0

我們有一個排序列,但肯定的,我們必須re-index所有行作爲事情的變化。您可以通過在足夠大的增量範圍內分配排序來實現某種程度的可移動性,例如10或100年的排序,但這不是最好的解決方案,我希望看看人們有什麼其他想法。

1

一般添加額外的position場是你可以做,才能得到真正的任意順序的唯一的事情。

但是你可以用幾種方式來實現它。以下是我前段時間實施自我的兩種方法。

1.方法:更新所有position值,循環播放您的項目併爲每個位置執行UPDATE聲明。

這很容易實現,但由於許多更新的,這不是好了很多項目和/或大表。特別是如果你通過Ajax來完成,並且對列表中的每個更改都執行完整的重新排序。

2.方法:配置只能在受影響的行智能更新。

  1. SELECT在當前的排序順序(「舊名單」)所有(通常比較快於UPDATE語句)
  2. 遍歷從「新名單」的所有項目和每個項目比較項目來自同一位置/指數的舊名單。如果項目是相同的,沒有做任何事情
  3. 如果項目是不同的發現從舊列表中的項目,這實際上應該是在那個位置,並相應地更新其position值(某些查找數據結構可能在這裏是有用的)

這樣你只需要執行最小的數據庫更新,但你會有更復雜的代碼。

就我個人而言,我會採用第一種方式,直到數據庫更新實際上成爲性能問題。

0

如果你可以捕捉每個移動編程(含上下例如按鈕),那麼你可以換行移動和行的位置編號移動。確保在最大位置+ 1處添加新行。