1

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

我们正在使用 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 秒)
4

3 回答 3

1

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

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

  1. 当用户最终点击保存时。
  2. 如果对象的任何值发生了变化。
于 2009-02-08T12:56:57.323 回答
1

我会将保存决定移动到一个明确的保存按钮中以进行重新排序,因为用户可能会改变主意,正如彼得莫里斯所建议的那样,这将解决您的性能问题。

需要考虑的其他事项 - 显式移动到顶部和移动到底部项目。

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

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

于 2009-02-08T13:12:09.603 回答
0

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

如果您只想暂时设置人们正在看屏幕的时间顺序,请通过用户界面进行。

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

于 2009-02-09T16:04:46.230 回答