InfoPath ではドロップダウン リスト ボックスの項目の設定は簡単にできますが、デザイン モードでは実現できないような複雑な設定が必要になることがあります。これは、InfoPath 外で少し作業することで可能になります。コード経由のドロップダウン リスト ボックスの設定は非常に強力ですが、コード ブロックの保持機能を使用する必要があります。
このタスクでは、ドロップダウン リスト ボックスをコード経由で設定します。ドロップダウン リスト ボックスは、保持するコード ブロックの作成に使用されるセクション内に配置します。まず、新しい空白のフォームを作成しておきます。
ビューの設計
- [コントロール] 作業ウィンドウを開きます。
- ビューにセクションを挿入します。
- セクションにドロップダウン リスト ボックスを挿入します。
オプションのリストを返すコードを書く
- Alt + Shift + F11 キーを押して Microsoft Script Editor を開きます。
- 次の関数を挿入します。
Java Script: function PopulateDropdown(sSelectedValue) { return "<option value=''>Select...</option><option value='Test'>Test</option>"; }
C#: public string PopulateDropdown(string sSelectedValue) { return "<option value=''>Select...</option><option value='Test'>Test</option>"; } |
- コードを保存し、Microsoft Script Editor を閉じます。
ビューの .xsl ファイルを変更して、保持するコード ブロックを作成する
- InfoPath デザイン モードで、[ファイル] メニューの [フォーム構成ファイルの取り出し] をクリックします。
- 取り出したフォーム構成ファイルの保存先を選択し、[OK] をクリックします。
- InfoPath を終了して、フォーム構成ファイルに対するロックを解除します。
- テキスト エディタを使用して、ビューの.xsl ファイルを開きます。
- ドロップダウン リスト ボックスを含む xsl:template を探します。
- xsl:template 要素とそれに関連付けられている xsl:apply-templates 要素の両方で、mode="_nn" 属性を mode="xd:preserve" と置き換えます。
mode 属性の値は、xsl:template 要素と xsl:apply-templates 要素の両方で同じになります。
- このドロップダウン リスト ボックス用にリストされているすべての option 要素を次のコードと置き換えます。
<xsl:value-of select="xdExtension:PopulateDropdown(string(my:BoundField))" disable-output-escaping="yes"/> |
ここで my:BoundField は select 要素の xd:binding 属性の値と同じです。
- .xsl ファイルを保存して、テキスト エディタを閉じます。
確認
- manifest.xsf ファイルをダブルクリックして、変更したソリューションを起動します。
InfoPath エディタには、"Select..." および "Test" が設定されたドロップダウン リスト ボックスが表示されます。 - [ツール] メニューの [このフォームのデザイン] をクリックします。
- InfoPath デザイン モードで、保持しているコード ブロックを示す赤いボックスが表示されます。
これで、PopulateDropdown 関数を修正して、必要な情報を処理してドロップダウン リスト ボックスに設定できるようになりました。返される文字列は、 option要素を含み、適切に書式化された HTML だけにして、XSL コードを含めないようにします。
現在選択されているオプションがどの option要素であるかを識別するには、sSelectedValue パラメータを使用する必要があります。コード内で、正しい option要素に selected="selected"属性を設定していることを必ず確認してください。設定していない場合、ビューのドロップダウン リストには選択値が表示されず、代わりに常にリスト内の最初のオプションの表示に戻ります。
このテクニックの使用例を参照するには、InfoPath Dev のサンプル フォーム「Fully Editable Drop-Down List Box 」および「Moving Items Between List Boxes」をダウンロードしてください。
©2004 Greg Collins. All rights reserved. Licensed to Autonomy Systems, LLC for display on InfoPathDev.com.
英文記事: Populate a Drop-Down List Box via Codeからの翻訳