2010-05-11 62 views
1

数据更改时刷新组合框的首选方法是什么?数据更改时刷新组合框的首选方法是什么?

如果窗体打开并且组合框数据已经加载,那么如何刷新组合框的内容而不必关闭并重新加载窗体?

您是否必须对组合框上的Click事件做些事情?如果每次有人点击一个组合框时数据库发生命中,这似乎可能会减慢应用程序的速度。

+0

VB6,VB.Net,其他? – 2010-05-11 05:13:06

+0

VB6,虽然我一般问这个问题。 – CJ7 2010-05-11 05:30:06

+0

@克雷格约翰斯顿,正如我所看到的,我的回答没有用? – hgulyan 2010-05-13 08:57:49

回答

1

您必须确定:

1)当你不改变的数据?

如果它依赖于其他用户的活动,因此无法确定是否在不查询数据库的情况下进行更改,您可以计算刷新的最佳时间,如表单加载或每次点击,或者您可以使用定时器控制在特定时间刷新数据。

2)您的用户何时需要了解该更改?

试着了解用户知道变化的紧迫程度。与他们交谈。根据不同的情况,决定何时需要刷新数据。

最后:

没有这样做的正确方法。它取决于软件结构,用户需求和具体情况。

希望它有帮助。祝你好运!

UPDATE:

我可以添加一个解决方案,我最近使用过的。如果事情不清楚,就问。

我假设,你的刷新组合从MS SQL Server

如果是这样,

创建一个表,在其存储组合的数据更改日期或版本。您可以比较组合的最后更改日期(或版本)和上次更改(或版本),或者使用定时器控件(每隔5分钟(或任何其他时间)检查更改),可以比较组合的上次更改日期在该表中我们存储最后日期(或版本),并且只有在日期(或版本)发生更改时才刷新组合。

3.您可以存储在变量或文本框控件中的最后日期(或版本),每次刷新组合时更改它的值。

4.如果数据更改,更新该表中的最后日期(或版本)。

在这种情况下,您只需检查更改,而不是更新它们。

P.S.如果这个解决方案不支持你,只需点击事件就刷新一次。这种情况没有更好的事件。

0

取决于有多少人会使用该表格,但在正常情况下,使用选择框的onclick事件没有问题。 使用ajax调用很好,因为这意味着您不必加载整个页面。

+0

这是胜利形式,我想。 – hgulyan 2010-05-13 11:26:35

0

有一件事很明显,你正在使用下拉的方式意味着没有更多的项目,你需要在dropdowm中加载我认为接近20或30. 然后,数据库调用的问题是什么? 创建将使用执行计划并为您提供快速结果的过程。 或者把你需要加载到缓存中的表格放在你的缓存中,并在某些时候填满你的缓存 如果数据发生改变,然后在下拉加载数据。 我在窗口应用程序工作我面临着同样的事情,但没有更好的选择 然后调用数据库或将其放入缓存。

0

我可以看到这样做的方法有两种:

  1. 放入UI中的“刷新”按钮,只有当用户点击该按钮重新加载数据。用户(描述性标签,消息框或其他)通过刷新刷新它的当前选择可能会改变应该很清楚。

  2. 监视组合数据库中组合数据库的数据更改。当数据发生变化时,用户界面可能会立即更新,或者只是存储关于已更改数据的标志(稍后会详细介绍)。为了快速了解数据更改的情况,数据库触发器似乎是我的最佳解决方案:在组合的基础表上设置触发器(UPDATE,INSERT,DELETE),并将计数器(日期时间,版本,任何漂浮在您的船上)递增为此创建一个单独的表格。每次组合重新填充(包括表单加载)时,都会将计数器的值附加(tag?)给它,以便与当前数据库值进行比较。获取当前的计数器值可以在计时器上完成。

现在,如果两个计数器是不同的有两种选择:

A.立即更新UI。我通常会讨厌这样的用户界面,但不知道你的实际需求是什么,这可能是一个选择。

B.设置UI应该更新的标志。在下拉事件中,检查标志:如果已设置,则从重新填充组合开始。

在大多数情况下,我会在没有任何刷新的情况下使用第一种解决方案,但它确实取决于需求。

HTH。

编辑:

触发器/计数器设置的目的不仅是为了获得改变的信息快,但真正知道如果数据变化,这将是更加复杂的实现直接查询基础表。对不起,如果这不是我最初的帖子(或甚至在此之后),但英文不是我的母语。

0

问题1:ComboboxName.Clear然后ComboboxName.Items.AddItem为每个项目。 问题2:当然这取决于数据更改的频率和列表的大小,但我可能会为每分钟左右设置一个计时器。这将防止太多的命中数据库,并确保你的表单没有花费太多的时间填充组合框的值。

相关问题