2011-12-16 105 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個條目,類似的設置,它工作得很好。沒有來自客戶的問題或投訴(還)。也許你的停機時間不在技術中,而是在執行或其他地方。

如果您有很多條目(數以千計或可能有的),也許另一種解決方案會更合適。但爲了您的目的,這應該就足夠了。