2011-12-16 100 views
1

我正在使用c#组合框控件,我希望允许用户输入新值。即我有DropDownStyle = DropDown。例如,我有一个组合框允许用户选择/输入国家代码。在加载表单时,我通过查询数据库来为各个国家的代码和显示文本设置组合框的数据集。用户可以选择一个现有的国家代码或输入一个新的国家代码。请不要问为什么我不能预先填充所有可能的国家/地区代码的组合框,因为它是一个有限的组,不经常更改,这是客户的要求,此外还有像这样的几个控件(测试中心等)。c#combobox编辑 - 最佳做法

现在当前组合框工作的方式是,如果用户键入新条目,我将新值添加到数据库并刷新数据集。我这样做是为了使新条目在数据库中具有适当的唯一代码。尽管这不是一个频繁的操作,但这会减慢应用程序的速度。目前我还将AutoCompleteMode属性设置为SuggestAppend。这是为了防止用户添加重复条目或输入现有条目的拼写错误。

这方面的最佳做法是什么?在内存中添加新条目并在稍后阶段将它们添加到数据库会更好吗?它是一个多用户应用程序,也有可能是其他人也可以添加相同的条目,尽管它很少。

这是一个在WinXP上运行的Windows窗体应用程序,有可能在Win7上运行,都是32位。

回答

-1

您不能添加一个try catch来检查当前列表中是否有新增的?

如果事情存在 不要插入 别的插入

+0

不需要`try catch`,`if`子句在这里就足够了。 – Otiel 2011-12-17 00:21:50

0

由于用户不需要关心插入到数据库中,你可以把那部分异步发生在主界面。这将防止UI的放慢。如果您使用.NET 4,请查看TPL库。

至于如何处理并发性,我建议你在数据库中使用一个过程,它将使用一个事务(或等价物)来首先选择,如果什么都不存在,则插入。无论哪种情况,它都可以返回唯一的ID。

2

我认为你正在通过向数据库添加新条目并刷新datasource来正确地做到这一点。当然,在添加之前,您需要检查该条目是否已经存在于数据库中,因为它可能是在其最后一次请求完成后添加的。它不应该花太长时间..但这取决于你的结果集。我在我的应用程序中使用这种技术,目前有314个条目,类似的设置,它工作得很好。没有来自客户的问题或投诉(还)。也许你的停机时间不在技术中,而是在执行或其他地方。

如果您有很多条目(数以千计或可能有的),也许另一种解决方案会更合适。但为了您的目的,这应该就足够了。