【セル型】 Ajaxコンボボックス型セルのドロップダウンリストをキー操作で表示できない場合がある
対象製品
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コンボボックスコントロールにおいても、下矢印キーによりドロップダウンリストが表示されない現象が発生するため本不具合の対象外です。
【再現コード】
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);
}
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);
}