数据更改时刷新组合框的首选方法是什么?数据更改时刷新组合框的首选方法是什么?
如果窗体打开并且组合框数据已经加载,那么如何刷新组合框的内容而不必关闭并重新加载窗体?
您是否必须对组合框上的Click事件做些事情?如果每次有人点击一个组合框时数据库发生命中,这似乎可能会减慢应用程序的速度。
数据更改时刷新组合框的首选方法是什么?数据更改时刷新组合框的首选方法是什么?
如果窗体打开并且组合框数据已经加载,那么如何刷新组合框的内容而不必关闭并重新加载窗体?
您是否必须对组合框上的Click事件做些事情?如果每次有人点击一个组合框时数据库发生命中,这似乎可能会减慢应用程序的速度。
您必须确定:
1)当你不改变的数据?
如果它依赖于其他用户的活动,因此无法确定是否在不查询数据库的情况下进行更改,您可以计算刷新的最佳时间,如表单加载或每次点击,或者您可以使用定时器控制在特定时间刷新数据。
2)您的用户何时需要了解该更改?
试着了解用户知道变化的紧迫程度。与他们交谈。根据不同的情况,决定何时需要刷新数据。
最后:
没有这样做的正确方法。它取决于软件结构,用户需求和具体情况。
希望它有帮助。祝你好运!
UPDATE:
我可以添加一个解决方案,我最近使用过的。如果事情不清楚,就问。
我假设,你的刷新组合从MS SQL Server。
如果是这样,
创建一个表,在其存储组合的数据更改日期或版本。您可以比较组合的最后更改日期(或版本)和上次更改(或版本),或者使用定时器控件(每隔5分钟(或任何其他时间)检查更改),可以比较组合的上次更改日期在该表中我们存储最后日期(或版本),并且只有在日期(或版本)发生更改时才刷新组合。
3.您可以存储在变量或文本框控件中的最后日期(或版本),每次刷新组合时更改它的值。
4.如果数据更改,更新该表中的最后日期(或版本)。
在这种情况下,您只需检查更改,而不是更新它们。
P.S.如果这个解决方案不支持你,只需点击事件就刷新一次。这种情况没有更好的事件。
取决于有多少人会使用该表格,但在正常情况下,使用选择框的onclick事件没有问题。 使用ajax调用很好,因为这意味着您不必加载整个页面。
这是胜利形式,我想。 – hgulyan 2010-05-13 11:26:35
有一件事很明显,你正在使用下拉的方式意味着没有更多的项目,你需要在dropdowm中加载我认为接近20或30. 然后,数据库调用的问题是什么? 创建将使用执行计划并为您提供快速结果的过程。 或者把你需要加载到缓存中的表格放在你的缓存中,并在某些时候填满你的缓存 如果数据发生改变,然后在下拉加载数据。 我在窗口应用程序工作我面临着同样的事情,但没有更好的选择 然后调用数据库或将其放入缓存。
我可以看到这样做的方法有两种:
放入UI中的“刷新”按钮,只有当用户点击该按钮重新加载数据。用户(描述性标签,消息框或其他)通过刷新刷新它的当前选择可能会改变应该很清楚。
监视组合数据库中组合数据库的数据更改。当数据发生变化时,用户界面可能会立即更新,或者只是存储关于已更改数据的标志(稍后会详细介绍)。为了快速了解数据更改的情况,数据库触发器似乎是我的最佳解决方案:在组合的基础表上设置触发器(UPDATE,INSERT,DELETE),并将计数器(日期时间,版本,任何漂浮在您的船上)递增为此创建一个单独的表格。每次组合重新填充(包括表单加载)时,都会将计数器的值附加(tag?)给它,以便与当前数据库值进行比较。获取当前的计数器值可以在计时器上完成。
现在,如果两个计数器是不同的有两种选择:
A.立即更新UI。我通常会讨厌这样的用户界面,但不知道你的实际需求是什么,这可能是一个选择。
B.设置UI应该更新的标志。在下拉事件中,检查标志:如果已设置,则从重新填充组合开始。
在大多数情况下,我会在没有任何刷新的情况下使用第一种解决方案,但它确实取决于需求。
HTH。
编辑:
触发器/计数器设置的目的不仅是为了获得改变的信息快,但真正知道如果数据变化,这将是更加复杂的实现直接查询基础表。对不起,如果这不是我最初的帖子(或甚至在此之后),但英文不是我的母语。
问题1:ComboboxName.Clear然后ComboboxName.Items.AddItem为每个项目。 问题2:当然这取决于数据更改的频率和列表的大小,但我可能会为每分钟左右设置一个计时器。这将防止太多的命中数据库,并确保你的表单没有花费太多的时间填充组合框的值。
VB6,VB.Net,其他? – 2010-05-11 05:13:06
VB6,虽然我一般问这个问题。 – CJ7 2010-05-11 05:30:06
@克雷格约翰斯顿,正如我所看到的,我的回答没有用? – hgulyan 2010-05-13 08:57:49