【セル型】 Ajaxコンボボックス型セルのドロップダウンリストをキー操作で表示できない場合がある

文書番号 : 37690     文書種別 : 不具合     登録日 : 2014/11/27     最終更新日 : 2015/03/31
文書を印刷する
対象製品
SPREAD for ASP.NET 7.0J
状況
修正済み
詳細
Ajaxコンボボックス型セルのドロップダウンリストをキー操作で表示できない場合があります。

【再現コード】
  Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If IsPostBack Then Return

    ' シートの設定
    FpSpread1.Sheets.Count = 2

    ' セル型の設定
    For i = 0 To FpSpread1.Sheets.Count - 1
      Dim cmb As New FarPoint.Web.Spread.Extender.AjaxComboBoxCellType
      cmb.DropDownStyle = AjaxControlToolkit.ComboBoxStyle.DropDown
      cmb.ShowEditor = True
      cmb.Items.Add("a")
      cmb.Items.Add("b")
      cmb.Items.Add("c")
      FpSpread1.Sheets(i).Cells(0, 0).CellType = cmb
      FpSpread1.Sheets(i).Cells(0, 0).Value = "a"
    Next

    FpSpread1.Focus()
  End Sub

【再現手順】
1.プロジェクトを起動します
 -- セルA1のAjaxコンボボックス型セルにフォーカスが設定されます
2.下矢印キーを押下します
 -- ドロップダウンリストが表示されません(適切な動作ではありません)
3.コマンドバーのSheet2をクリックしコールバックによりシートを切り替えます
 -- セルA1のAjaxコンボボックス型セルにフォーカスが設定されます
4.下矢印キーを押下します
 -- ドロップダウンリストが表示されません(適切な動作ではありません)

なお、Internet Explorer 11上ではAjaxコンボボックスコントロールにおいても、下矢印キーによりドロップダウンリストが表示されない現象が発生するため本不具合の対象外です。
回避方法
Service Pack 3(v7.0.4017.2010)で修正済み。
Service Pack 3(v7.0.4017.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------

下記のようなスクリプトを記述することにより回避します。

    window.onload = init;
    function init() {
      var spread = document.getElementById("FpSpread1");

      // フォームロード時にドロップダウンが表示されない現象に対する回避策
      if (spread.isEditing && !spread.isEditing()) {
        var anchorCell = spread.getAnchorCell();
        var editor = spread.getEditor(anchorCell);
        if (editor != null && $$.utils.contains(editor, document.activeElement)) {
          spread.StartEdit(anchorCell);
        }
      }

      // コールバック後にドロップダウンが表示されない現象に対する回避策
      if (spread.addEventListener) {
        spread.addEventListener("CallBackStopped", fixIssuePreventPopup, false);
      } else {
        spread.attachEvent("CallBackStopped", fixIssuePreventPopup);
      }
    }

    function fixIssuePreventPopup() {
      setTimeout(function () {
        var spread = document.getElementById("FpSpread1");
        spread.preventPopUp = false;
      }, 0);
    }