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

时间:2009-02-08 12:48:28

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

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

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

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

  1. 流程A
  2. 流程B
  3. 流程C
  4. 报告A
  5. 报告B
  6. 报告C
  7. 我们希望允许用户将订单更改为他们想要的任何内容。

    以下是一个例子:

    1. 流程C
    2. 流程A
    3. 流程B
    4. 报告B
    5. 报告A
    6. 报告C
    7. 为了适应这种情况,我们在我们的应用程序维护的表中添加了一个DisplayOrder(INT)字段。

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

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

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

      如果您很好奇,我相信我们的应用程序允许编辑DisplayOrder:

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

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

我会将保存决定移动到显式保存按钮以进行重新排序,因为用户可能会改变主意,正如Peter Morris所说,这将超越您的性能问题。

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

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

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

答案 2 :(得分:0)

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

如果您想在人们看屏幕的时候暂时设置订单,请通过用户界面进行操作。

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