2009-12-09 99 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处添加新行。