数据更改时刷新组合框的首选方法是什么?
如果表单已打开并且已经加载了组合框数据,那么如何在不必关闭和重新加载表单的情况下刷新组合框的内容?
您是否必须对组合框上的Click事件执行某些操作?如果每次有人点击组合框时数据库都会受到攻击,这似乎会对应用程序造成潜在的减速。
答案 0 :(得分:1)
您必须确定:
1)您的数据何时发生变化?
如果它取决于其他用户的活动,那么你无法确定它是否在没有查询数据库的情况下进行了更改,你可以找出最佳的刷新时间,例如表单加载或每次点击,或者你可以使用定时器控件在特定时间刷新数据。
2)您的用户何时需要了解该更改?
尝试了解用户了解更改的紧急程度。与他们交谈。根据具体情况,决定何时需要刷新数据。
<强>最后:强>
没有正确的方法。这取决于软件结构,用户需求和具体情况。
希望它有所帮助。祝你好运!
<强>更新强>
我可以添加我最近使用过的解决方案。如果事情不明确,请问。
我假设您从 MS SQL Server 刷新了这个组合。
如果是的话,
1。创建一个表,在其中存储Combo的数据更改日期或版本。
2。 onClick事件或使用定时器控件,它会每隔5分钟(或任何其他时间)检查更改,您可以将组合的最后更改日期(或版本)与上次更改进行比较(或版本)在该表中我们存储上次日期(或版本),并且仅在更改日期(或版本)时,刷新组合。
3. 您可以存储在变量或文本框控件中的最后日期(或版本),每次刷新组合时都会更改它的值。
4. 如果数据发生更改,请更新该表中的最后日期(或版本)。
在这种情况下,您只需要检查更改,而不是更新它们。
P.S。如果此解决方案不适合您,则只需在每次点击活动时刷新。对于那种情况没有更好的事件。
答案 1 :(得分:0)
取决于有多少人将使用该表单,但在正常情况下,使用选择框的onclick事件是可以的。 使用ajax调用很好,因为这意味着你不必加载整个页面。
答案 2 :(得分:0)
有一点很清楚,你正在使用Dropdown意味着你需要在下拉列表中加载更多项目,我认为接近20或30左右。 那么,数据库调用有什么问题呢? 创建将使用执行计划并为您提供快速结果的过程。 或者放置一个表,您需要在缓存中加载并在特定时间填充缓存 如果数据发生变化,则在下拉列表中加载数据。 我在Window应用程序中工作我面临同样的事情,但没有更好的选择 然后调用数据库或将其放入缓存中。
答案 3 :(得分:0)
我可以看到两种方法:
在UI中放置“刷新”按钮,仅在用户单击按钮时重新加载数据。用户应该清楚(描述性标签,消息框或其他)通过点击刷新其当前选择可能会改变。
监视组合的基础表的数据库中的数据更改。当数据发生变化时,UI可以立即更新,也可以只存储有关已更改数据的标志(稍后会详细介绍)。为了快速了解数据何时发生变化,数据库触发器对我来说似乎是最好的解决方案:触发器(UPDATE,INSERT,DELETE)在组合的基础表上设置并递增计数器(日期时间,版本,无论你的船漂浮在哪里)仅为此目的创建的单独表。每次重新填充组合(包括表单加载)时,计数器的值都附加(标记?),以与当前数据库值进行比较。获取当前计数器值可以在计时器上完成。
现在,如果两个计数器不同,有两个选项:
一个。立即更新UI。我通常讨厌这样的用户界面,但不知道你的实际要求是什么,这可能是一种选择。
B中。设置应更新UI的标志。在下拉事件中,检查标志:如果已设置,则从重新填充组合开始。
在大多数情况下,我根本没有任何刷新或使用第一个解决方案,但这实际上取决于要求。
HTH。
编辑:
触发/计数器设置的目的不仅是为了快速获取更改信息,而且实际上知道如果数据发生了变化,这将通过直接查询基础表来实现更加复杂。对不起,如果在我的初始帖子中(或者甚至在此添加之后)不清楚,但英语不是我的母语。
答案 4 :(得分:0)
问题1:每个项目的ComboboxName.Clear然后是ComboboxName.Items.AddItem。 问题2:当然这取决于数据变化的频率和列表的大小,但我可能会为每分钟左右设置一个计时器。这样可以防止对DB进行过多的点击,并确保您的表单不会花费太多时间来填充组合框的值。