【问题标题】:Best way to allow the User to define a Table’s Order?允许用户定义表格顺序的最佳方式?
【发布时间】:2009-02-08 12:48:27
【问题描述】:

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

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

【问题讨论】:

  • 我想做类似的事情(向上或向下移动一行)。你有任何可以发布的示例代码吗?
  • 很抱歉,我目前没有。我希望找到更通用的东西。

标签: .net sql sql-server vb.net devexpress


【解决方案1】:

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

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

  1. 当用户最终点击保存时。
  2. 如果对象的任何值发生了变化。

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      在任何情况下都不要对基表中的记录重新排序,这是一个糟糕的选择,因为您会遇到用户 a 想要一个设置而用户 b 同时尝试更改为不同设置的竞争条件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-07
        相关资源
        最近更新 更多