我的客户希望通过拖放对产品进行分类。下降。拖曳与使用javascript轻松删除部分。
我的问题是如何保存并获取排序顺序?
我正在使用.net c#和SQL Server 2008.
当我移动产品并将其放在新位置时,我会得到移动产品的ID,产品在前面,产品在后面。有了这些数据,我想更新产品的排序顺序。
我正在考虑添加一个有位置的字段,但我想我必须在位置更改时更新每个项目。
答案 0 :(得分:1)
一般情况下,添加额外的position
字段是您唯一可以做的事情,以获得真正的任意排序。
但您可以通过多种方式实现它。以下是我不久前实现的两种方式。
<强> 1。方法:更新所有position
值,方法是循环您的项目并为每个位置执行UPDATE
语句。
这很容易实现,但由于许多更新,它对许多项目和/或大型表格都不利。特别是如果您通过Ajax执行此操作并对列表中的每个更改执行完整的重新排序。
<强> 2。方法:仅对受影响的行进行智能更新。
SELECT
当前排序顺序中的所有项目(“旧列表”)(通常与UPDATE
语句相比较快)position
值(某些查找数据结构可能在此处有用)这样,您只需要执行最少的数据库更新,但是您将拥有更复杂的代码。
就个人而言,我会采用第一种方式,直到数据库更新实际上成为性能问题。
答案 1 :(得分:0)
我们有一个排序列,但是我们必须re-index
所有行都会发生变化。您可以通过以足够大的增量分配排序来缓解这种情况,以便在必须执行此操作之前允许某种程度的可移动性,例如10或100,但这不是最佳解决方案,我有兴趣看看人们有什么其他想法。
答案 2 :(得分:0)
如果您可以以编程方式捕获每个移动(例如使用向上和向下按钮),那么您只需交换移动行和移动行的位置编号。确保在最大位置+ 1处添加新行。