允许用户定义表顺序的最佳方法是什么?
我们正在使用SQL Server 2005和DevExpress控件。
我们有一个包含以下内容的表:
我们希望允许用户将订单更改为他们想要的任何内容。
以下是一个例子:
为了适应这种情况,我们在我们的应用程序维护的表中添加了一个DisplayOrder(INT)字段。
使用INT字段是用户定义订单的最佳解决方案吗?
还有其他方法可以实现吗?
我要问的原因是,在我们当前的应用程序中,向下(或向上)移动一行大约需要1秒钟。我即将破解代码,看看它为什么花了这么长时间,如果Stack Overflow大师有任何好主意,我可能会在那时实现它们。
如果您很好奇,我相信我们的应用程序允许编辑DisplayOrder:
答案 0 :(得分:1)
每次交换可能需要1秒,因为您每次点击都会更新数据库吗?甚至可能再次重新选择数据?
为什么不选择数据到本地对象。绑定到网格中的那些对象。上下移动对象时,请调整其显示顺序属性。然后只对DB进行更新
答案 1 :(得分:1)
我会将保存决定移动到显式保存按钮以进行重新排序,因为用户可能会改变主意,正如Peter Morris所说,这将超越您的性能问题。
需要考虑的其他事项 - 明确移至顶部并移至底部项目。
我使用这种方法实现了一个非常成功的用户界面,用于在企业系统中按用户驱动选择可搜索项目和报告项目。用户界面的更多细节是available for you to see(善良,记住它大约15岁 - 回到平坦的单日!)。许多用户测试的一个关键改进 - 保存此订单的最佳位置不是每个用户或每个公司,而是每个组。组是一起工作的人,他们具有相同的起始页(在大量连接的图中基本上是相同的根)。我们组织中有大约7个独特的小组。
因此,如果您采用按用户或按组方法,则需要将排序数据拉出到一个单独的表中,该表将数据键映射到序数整数。
答案 2 :(得分:0)
如果您所在地区正在谈论用户想要设置和保留的显示顺序,则需要在一个单独的表中,该表包含用户ID和他或她想要查看的记录的ID以及显示顺序列。然后,获取该页面数据的查询将使用连接到用户首选项表。
如果您想在人们看屏幕的时候暂时设置订单,请通过用户界面进行操作。
无论如何不要对基表中的记录进行重新排序,这是一个糟糕的选择,因为您将遇到竞争条件,其中用户a想要一个设置而用户b同时尝试更改为不同的设置。