【スクリプト】 仮想ページングを有効にした状態ではSetActiveCellメソッドが正常に機能しない

文書番号 : 38216     文書種別 : 不具合     登録日 : 2015/03/12     最終更新日 : 2015/03/31
文書を印刷する
対象製品
SPREAD for ASP.NET 7.0J
状況
修正済み
詳細
仮想ページングを有効にした場合、クライアント側スクリプトのSetActiveCellメソッドが正常に動作しません。

【現象1】
仮想ページングを有効にした状態でSetActiveCellメソッドをコールすると画面が不要にスクロールします

【再現手順】
1.新規WebフォームにSPREADひとつを配置する
2.Webフォームに下記の再現コードを貼り付け、Web フォームを起動する
3.コマンドバーの次ページボタンを押下して、2ページ目を表示する
4.Tabキーを押下する
--- SPREADの表示が不要にスクロールする

【現象2】
仮想ページングを有効にした状態でSetActiveCellメソッドをコールしても正しい位置にアクティブセルが設定されません。

【再現手順】
1.新規WebフォームにSPREADひとつを配置する
2.Webフォームに下記の再現コードを貼り付け、Web フォームを起動する
3.コマンドバーの次ページボタンを二回押下して、3ページ目を表示する
4.Tabキーを押下する
--- SPREADの表示が2ページ目になる

【再現コード】
------------------------------------
Webフォームクラス
------------------------------------
Public Class WebForm1
  Inherits System.Web.UI.Page

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Page.IsPostBack Then Return

    ' 基本設定
    FpSpread1.Height = 788
    FpSpread1.Width = 420
    FpSpread1.ActiveSheetView.ColumnCount = 12
    FpSpread1.ActiveSheetView.RowCount = 300
    FpSpread1.ActiveSheetView.PageSize = 20
    FpSpread1.ActiveSheetView.AllowVirtualScrollPaging = True
    FpSpread1.ActiveSheetView.VirtualScrollPagingPrevRowCount = 5

    ' 行テンプレートの設定
    FpSpread1.ActiveSheetView.LayoutMode = FarPoint.Web.Spread.SheetView.LayoutModeType.RowTemplateLayoutMode
    Dim template1 As FarPoint.Web.Spread.WorksheetTemplate = FpSpread1.ActiveSheetView.WorksheetTemplate
    template1.ColumnCount = 4
    template1.ColumnHeaderTemplate.RowCount = 3
    For i As Integer = 0 To 3
      template1.LayoutCells(0, i).DataIndex = i
      template1.LayoutCells(1, i).DataIndex = i + 4
      template1.LayoutCells(2, i).DataIndex = i + 4 * 2
    Next
  End Sub
End Class

------------------------------------
クライアント側スクリプト
------------------------------------
  document.onreadystatechange = function () {
    if (document.readyState == 'complete') {
      var spread = document.getElementById('FpSpread1');
      if (spread.addEventListener) {
        spread.addEventListener("keydown", kd, false);
      } else {
        spread.onkeydown = kd;
      }
    }
  }
  function kd(e) {
    e = e || window.event;
    if (e.keyCode == 9) {
      if (e.preventDefault) {
        e.preventDefault();
        e.stopPropagation();
      }
      else {
        e.keyCode = 0;
        e.returnValue = false;
        e.cancelBubble = true;
      }
      moveNextA();
    }
  }
  function moveNextA() {
    var spread = document.getElementById('FpSpread1');
    var row = spread.GetActiveRow();
    var col = spread.GetActiveCol();
    var maxCol = spread.GetColCount() - 1;
    var maxRow = spread.GetRowCount() - 1;
    if (col == maxCol) {
      if (row == maxRow) {
        return;
      } else {
        col = 0;
        row += 1;
      }
    } else {
      col += 1;
    }
    spread.SetActiveCell(row, col);
  }
回避方法
Service Pack 3(v7.0.4017.2010)で修正済み。