2012-01-25 11 views
3

私は、Question_Id、value、enableの列を使用して質問をデータ化できます。これには質問のリストが回答とともにロードされます。DataTableで式を作成し、提案を提案しますか?

UIコントロールは、質問が有効に設定されている質問付きの質問に基づいて作成されます。ユーザーがいずれかの質問に対して回答を選択/変更すると、質問表に値が更新され、その結果、関連する他の質問があれば有効/無効になります。

これは、基本的に 'Y ==(someValue)AND/OR .....の場合はXを有効にする'のような式で定義します。ここでX、Yは質問です。

私はLinq.Expressionの式ツリーを使用してこれを処理したいが、式の評価には新しく、実装するには良い設計基準を探している。

誰かがこれについて私を導くことができますか?

+0

いくつかの更新を待っています! – Dhana

+0

それは私には分かりません:1)回答を編集するプロセス、またはエンドユーザーが回答に返信するプロセスについて説明していますか? 2)2つの質問が「関連」していることをどのように知っていますか?あなたの回答テーブルも記入してください(可能な答えと私が推測する「正しい」答えでいっぱいです) – GameAlchemist

+0

1.編集の答えは、ドロップダウンから値を選択することを意味します。ここではドロップダウンには質問のオプションがすべて含まれています。 – Dhana

答えて

0

質問を正しく理解している場合は、それらの質問の回答に基づいて動的に更新する必要がある質問のリストを作成しています。たとえば、質問#1に答えた場合、質問#2は無効にする必要があります(またはもっと複雑なもの)。

私は、動的なコード生成(例えば、表現木)を大いに好んでいますが、これは実際には単一のDataTableよりはるかに優れた関係を表現するのに役立つため、XML構造でより簡単に扱うことができます。

<question id="1"> 
    <if valueToCompare="Foo" operator="EqualTo"> 
     <disable questionId="5" /> 
     <removeOption questionId="6" optionId="2" /> 
    </if> 
</question> 

質問に対するユーザーの回答が変わるたびに、対応するXMLノードを調べてそれに応じて行動します。

非常に複雑なコントロールを使用しない限り、コンパイルされた式を必要とせずにコントロールをリアルタイムで評価および再構築することができます。

しかし、式について学びたい場合は、確かにXML構造からそれらを外挿して構築し、質問が変わるたびに呼び出される代理人を作成することができます。たとえば、質問#1に応答すると質問#2が無効になる必要がある場合は、このロジックを質問#1が変更されたときに起動されるデリゲートに切り替えることができます。

これは、最初にデータソース(XMLなど)を構文解析し、文字列または複数の列として単純な論理ステートメントをDataTableに格納して解析し、条件文の定義を式ツリーに変換する必要があります。これは、意思決定ツリーがどれほど複雑であるかに応じて、非常に単純または複雑になる可能性があります。