2011-06-28 11 views
1

私はここで、約100個のコントロールがほとんどがマルチ選択のリストボックス を持っていますが、他のもの(ドロップダウンチェックボックス)が入り込み、スクリーニングのための複雑な検索基準を絞り込んでいます。彼らが後で戻ってくるときには、基準を満たすために使用した値にコントロールをリセットするためのレコードを引き出す行為が必要です。C#コントロールへの値の復元Iterativley

各コントロールの列を持つテーブルを作ったので、iterativleyは値を格納します - ユーザーが次のステップに移動するための検索条件をロックすると、コンマ がリストボックスのために区切られます。

他の場合は、値がxであると言うスイッチを使用します:control xを値に設定してください。これを繰り返す良い方法があります。列の名前はコントロールの名前です?私は、あなたはおそらく、リフレクションを使用すると、各コントロールを渡す可能にするために、単一のインターフェイスからinheitsファクトリメソッドを持っている必要があります...現時点で

enter image description here

var CParam = QueryFnc.RstrCntrls(Jnum, Qnum); 
    foreach(var a in CParam) 
    { 
     //Map Values to Matching Named Control 


    } 
+0

コントロールコレクションの外観を示すために、いくつかのコードを共有する必要があります。あなたはタブの順序を見てみたいかもしれませんが、おそらくあなたのケースでは十分ではありません。 –

+0

@ J.N。それは私が現時点で何を持っているかについてのことです...私は熟考段階にあります。私は簡単に300行のスイッチを行うことができますが、私はそれに取り組むためのより良い方法について考えていると思っていました –

答えて

2

コントロールツリーが一定のままである限り、コントロールインデックスを使用して値をマップできます。しかし、より良い賭けは、コントロールのIDを使用することです(その.NET4では、より良いコントロールのために予測可能なIDまたは手動のID割り当てが行われる場合)、値をマップします。

値を1つの行に格納するのではなく、行に値を格納するテーブルを使用することをお勧めします。たとえば、

UserId ColumnName ControlID Value 
------ ---------- --------- -------- 
1  ABC   ddlAbc  52 
1  XYZ   ddlXyz  102, 32 
... 
2  XYZ   ddlXyz  23 

これにより、ユーザーIDの行を取得して行を反復処理することがより簡単になります。各行について、FindControlメソッドを使用してコントロールを見つけることができます(コントロール階層内にコンテナの名前を付ける場合に備えて再帰実装をロールアップする必要があります)。

0

を困惑します格納された値。

あなたはそれを介して制御が(文字列として)名前のFind(その後、インスタンス化)することができます反射して

EDIT:ちょうど大声ここを考えて ...あなたはまた、チェーンを使用することができるかもしれませんクラスのリストに沿って列の名前を渡します。責任を負う名前をキャッチしてインスタンスを返すのはそれぞれのオブジェクトの責任です。

+0

http: //www.codeproject.com/KB/architecture/FactoryMethod_Reflection.aspx? –

+0

その記事は非常に役に立ちそうです。 –

関連する問題