允许用户定义表顺序的最佳方式?

我们使用 SQL Server 2005 和 DevExpress 控件。

我们有一个包含以下内容的表:

  1. 工艺A
  2. 工艺B
  3. 工艺C
  4. 报告A
  5. 报告B
  6. 报告C

我们希望允许用户将顺序更改为他们想要的任何内容。

这是一个例子:

  1. 工艺C
  2. 工艺A
  3. 工艺B
  4. 报告B
  5. 报告A
  6. 报告C

为了适应这一点,我们向应用程序维护的表中添加了一个 DisplayOrder (INT) 字段。

使用 INT 字段是用户定义订单的最佳解决方案吗?

还有其他方法可以实现此目的吗?

我要问的原因是,在我们当前的应用程序中,向下(或向上)移动一行大约需要 1 秒。我即将破解代码,看看为什么要花这么长时间,如果 Stack Overflow 专家有任何好的想法,我可能会在那时实现它们。

如果您好奇,我认为我们的应用程序允许编辑 DisplayOrder 的方式如下:

  1. 将表加载到 GridView 中
  2. 选择一行
  3. 单击“下移”按钮(还有一个“上移”按钮)
  4. Click 事件会将当前行的 DisplayOrder 与其下方的行交换。
  5. 对两条记录的更改都会写回数据库
  6. 每次点击大约需要 1 秒(即10 次点击等于 10 秒)
有帮助吗?

解决方案

每次交换是否会花费 1 秒,因为每次点击都会更新数据库?也许甚至还要重新选择数据?

为什么不将数据选择到本地对象中。绑定到网格中的那些对象。当您上下移动对象时,可以调整它们的显示顺序属性。然后只对数据库进行更新

  1. 当用户最终单击“保存”时。
  2. 如果对象的任何值已更改。

其他提示

我会将保存决策移至明确的“保存”按钮中以进行重新排序,因为用户可能会改变主意,并且正如 Peter Morris 所建议的那样,这将解决您的性能问题。

需要考虑的其他事项 - 明确的“移至顶部”和“移至底部”项目。

我使用这种方法在企业系统中实现了一个非常成功的 UI,用于用户驱动的可搜索项目和报告项目的选择。UI 的更多详细信息是 可供您查看 (友善一点,记住它大约有 15 岁了——回到平坦的单声道时代!)。大量用户测试的一个关键改进 - 保存此订单的最佳位置不是每个用户或每个公司,而是每个组。小组是一起工作的人,他们具有相同的起始页面(本质上是大规模连接图中的相同根)。我们的组织中有大约 7 个独特的小组。

因此,如果您采用按用户或按组的方法,则需要将排序数据提取到一个单独的表中,该表将数据键映射到序数整数。

如果您讨论的是用户想要设置和保留的显示顺序,则需要将其放在一个单独的表中,其中包含用户 ID 和他或她想要查看的记录的 ID 以及显示顺序列。然后,将数据获取到该页面的查询将使用到用户首选项表的联接。

如果您只想暂时设置用户查看屏幕的时间顺序,请通过用户界面进行操作。

无论如何,不​​要对基表中的记录重新排序,这是一个糟糕的选择,因为您将遇到竞争条件,其中用户 a 想要一个设置,而用户 b 同时尝试更改为不同的设置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top