2010-12-29 5 views
0

コンボボックスに、リレーショナルクエリ結果を置きます3番目の表には、ツールとファセットのリストが含まれています。
TID2とFID3は、それぞれのツールとファセットのIDである
1 TID2 FID3
2 TID2 FID4
3 tid3 FID2私は以下の私のデータベース内のカラムと3つのテーブルを持っている

別のコンボボックスでは、ユーザーが特定のツールを選択しました。私は今、このツールに適用されるファセットを別のコンボボックスに表示したいと考えています。

提案がありますか?

ありがとうございました。

答えて

1

ユーザーが最初に選択したときに2番目のコンボボックスのアイテムを再投入するだけで済みます。

ユーザーが選択するたびにデータベースを再クエリーする必要はなく、その代わりにtoolidにキーされたすべての有効なファセットをメモリー内に保持する必要があります。 Daveのコメントに基づいて

EDITさらにいくつかの詳細:

あなたは既にデータベースを照会するためにいくつかのコードを設定していると仮定すると、あなたはに戻って、関連するデータをあなたに与えるクエリ(またはクエリ)を実行したいですキャッシュを保持し、データベースに接続した後にアプリの初期化の一環としてこれを行います。ツールとファセットデータを保持する2つの辞書を作成できます。たとえば、次のように

Dictionary<int, string> _tools = new Dictionary<int, string>(); 
Dictionary<int, string> _facets = new Dictionary<int, string>(); 

、その後、基本的にtool_facet内のデータを保持している第3の構造:

Dictionary<int, List<int>> _tool_facets = new Dictionary<int, List<int>>(); 

これらは基本的にはあなたが非常に迅速に投入するために列挙することができ、テーブルのインメモリコピーを与えますコンボボックス。あなたはこのような何かを行います、IDと説明を保持している何かをコンボボックスを移入することをお勧めします:

class ComboBoxIntItem 
{ 
    private readonly int _id; 
    private readonly string _name; 
    public ComboBoxIntItem(int id, string name) 
    { 
    _id = id; 
    _name = name; 
    } 
    public override string ToString() 
    { 
    return _name; 
    } 
    public int GetId() 
    { 
    return _id; 
    } 
} 

私はあなたがユーザーというツールと、ファセットのIDを知っておく必要があることを、ここで仮定しています選択しました。私の他の答えのすべてが不必要な多くの作業のように聞こえるならば、あなたもそのあなたデータバインディング機能を使用して見て可能性があり

Dictionary<string, List<string>> _tool_facets = new Dictionary<string, List<string>>(); 
+0

あなたの最初の点に答えて:はい。第二に対応して、どうすればこの構造を作ることができますか? – Meir

+0

私はいくつかの詳細を追加しました、うまくいけば正しいレベルで投げた... –

1

:あなたが名前だけを気なら、あなたはちょうどこのような単一の構造を使用することができます.NETコントロールを入手してください。正直言って私はファンではなく、私の他の答えに応じて "手で"やりたいと思っています。どうして?さて、あなたは、より多くのコントロールと、データベースからのUIコードの良い分離を感じています。データバインディングアプローチを使用することは小さなアプリにとっては問題ありませんが、私の経験では大きなアプリでは非常に面倒です。

関連する問題