2011-12-16 11 views
1

私はユーザーが新しい値を入力できるようにするために、C#コンボボックスコントロールを使用しています。すなわち私はDropDownStyle = DropDownを持っています。たとえば、ユーザーが国コードを選択/入力できるようにするコンボボックスがあります。フォームを読み込んでいる間、私はコンボボックスのデータセットをデータベースに照会し、国のコードとdisplaytextを照会します。ユーザーは既存の国コードを選択するか、新しい国コードを入力することができます。私はコンボボックスにすべての可能な国コードをあらかじめ入力することができない理由を尋ねないでください。変更が頻繁でない有限集合です。これは顧客の要件であり、このようないくつかのコントロール(テストセンターなど)があります。c#combobox edit - ベストプラクティス

現在、コンボボックスの仕組みは、ユーザーが新しいエントリを入力すると、データベースに新しい値を追加してデータセットを更新します。私はこれをして、新しいエントリーがデータベースに適切な一意のコードを持つようにします。これは頻繁な操作ではありませんが、アプリケーションを少し遅くします。現在は、AutoCompleteModeプロパティをSuggestAppendに設定しています。これは、ユーザーが重複エントリを追加したり、既存エントリのスペルミスを入力しないようにするためです。

この点に関するベストプラクティスは何ですか?新しいエントリをメモリに追加し、後の段階でデータベースに追加する方が良いでしょうか?それはマルチユーザアプリケーションであり、稀ではあるが他の人が同じエントリを追加する可能性もあります。

これはWinXP上で動作するWindowsフォームアプリケーションで、おそらくWin7上で実行される可能性があります。いずれも32ビットです。

答えて

-1

あなたは、新たに追加されたものに対して現在のリストをチェックするtry catchを追加できませんでしたか?

何かが存在する場合 は、ユーザーがデータベースへの挿入を気にする必要はありませんので、あなたはその部分がメインUIに非同期的に実現することができ

+0

'try catch 'を必要とせず、' if'節で十分です。 – Otiel

0

を挿入し、他の を挿入しないでください。それはUIの減速を防ぎます。 .NET 4を使用している場合は、TPLライブラリを参照してください。

並行性をどのように処理できるかについては、トランザクション(または同等のもの)を使用して最初に選択するプロシージャを使用し、何も存在しない場合は挿入することをお勧めします。どちらの場合でも、一意のIDを返すことができます。

2

データベースに新しいエントリを追加し、datasourceを更新することで正しく実行されていると思います。もちろん、追加する前に、そのエントリがデータベースに存在していないことを確認する必要があります。可能であれば、最後のリクエストが行われた後に別のユーザーによって追加された可能性があります。長すぎるはずはありませんが、結果セットによって異なります。私はこの技術を私のアプリケーションのコンボボックスに現在314のエントリ、同様の設定で使用していますが、うまくいきます。クライアントからの質問や苦情はありません(まだ)。たぶん、あなたのダウンタイムはテクニックではなく、インプリメンテーションや他の場所にあるかもしれません。

何千ものエントリがあれば、おそらく別の解決策が適切かもしれません。しかし、あなたの目的のためには、これで十分です。