【问题标题】:What is the preferred method of refreshing a combo box when the data changes?数据更改时刷新组合框的首选方法是什么?
【发布时间】:2010-05-11 05:09:32
【问题描述】:

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

如果表单已打开且组合框数据已加载,如何在不必关闭并重新加载表单的情况下刷新组合框的内容?

你必须对组合框上的 Click 事件做些什么吗?如果每次有人点击组合框时都会点击数据库,这似乎会导致应用程序变慢。

【问题讨论】:

  • VB6,虽然我是在问这个问题。
  • @Craig Johnston,如我所见,我的回答没有用?
  • @hgulyan:我觉得你的回答太笼统了。
  • @Craig Johnston,但你不知道如何组织刷新,是吗?填充组合有什么问题吗?你能告诉我,你什么时候需要刷新组合以及多久刷新一次?我会告诉你怎么做。
  • 似乎很笼统,因为您要求首选方法,这就是为什么我的回答是没有首选方法,这取决于情况。

标签: vb6 combobox refresh


【解决方案1】:

您必须确定:

1) 您的数据何时更改?

如果它取决于其他用户的活动,因此如果不查询数据库就无法确定它是否已更改,则可以确定刷新的最佳时间,例如表单加载或每次点击,或者您可以使用计时器控件在特定时间刷新数据。

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

尝试了解用户了解更改的紧迫性。跟他们讲话。根据这一点,决定何时需要刷新数据。

最后:

没有正确的方法可以做到这一点。这取决于软件结构、用户需求和特定情况。

希望对您有所帮助。祝你好运!

更新:

我可以添加我最近使用的解决方案。如果有什么不清楚的地方,尽管问。

我假设,您从 MS SQL Server 刷新组合。

如果是这样,

1. 创建一个表,其中存储Combo的数据更改日期或版本。

2. onClick 事件或使用计时器控件,它将每 5 分钟(或任何其他时间)检查一次更改,您可以将您的组合的上次更改日期(或版本)与上次更改进行比较(或版本)在我们存储最后日期(或版本)的表中,并且仅当日期(或版本)已更改时,刷新组合。

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

4. 如果数据发生变化,请更新该表中的最后日期(或版本)。

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

P.S. 如果此解决方案不适合您,只需在每次点击事件时刷新即可。对于这种情况,没有比这更好的事件了。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      有一点很清楚,您正在使用 Dropdown 意味着您不需要在 dropdowm 中加载更多项目,我认为大约 20 或 30 个。 那么,数据库调用有什么问题呢? 创建将使用执行计划并为您提供快速结果的过程。 或将需要加载的表放入缓存并在特定时间填充缓存 如果数据发生变化,则在下拉列表中加载数据。 我在 Window 应用程序中工作我面临同样的事情,但没有更好的选择 然后调用数据库或者放入缓存中。

      【讨论】:

        【解决方案4】:

        我可以看到两种方法:

        1. 在 UI 中放置一个“刷新”按钮并仅在用户单击该按钮时重新加载数据。用户(描述性标签、消息框或其他)应该清楚点击刷新,其当前选择可能会发生变化。

        2. 监控数据库中组合基础表的数据更改。当数据更改时,UI 可能会立即更新,也可能只存储有关数据已更改的标志(稍后会详细介绍)。为了快速了解数据何时更改,数据库触发器对我来说似乎是最好的解决方案:在组合的基础表上设置触发器(UPDATE、INSERT、DELETE)并在仅为此目的创建一个单独的表。每次重新填充组合(包括表单加载)时,都会将计数器的值附加(标记?),以与当前数据库值进行比较。可以在计时器上获取当前计数器值。

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

        A.立即更新 UI。我通常会讨厌这样的 UI,但不知道您的实际要求是什么,这可能是一种选择。

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

        在大多数情况下,我会完全不进行任何刷新或使用第一个解决方案,但这确实取决于需求。

        HTH。

        编辑:

        触发器/计数器设置的目的不仅是为了快速获取更改信息,而且是为了真正了解如果数据发生了更改,而通过直接查询基础表来完成这将要复杂得多。抱歉,如果我在最初的帖子中(甚至在此添加之后)不清楚这一点,但英语不是我的母语。

        【讨论】:

          【解决方案5】:

          问题 1:ComboboxName.Clear 然后ComboboxName.Items.AddItem 用于每个项目。

          问题 2:当然这取决于数据更改的频率和列表的大小,但我可能会设置一个每分钟左右设置的计时器。这将防止对数据库的过多点击,并确保您的表单不会花费太多时间将值填充到组合框。

          【讨论】:

            猜你喜欢
            • 2011-08-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-08
            相关资源
            最近更新 更多