【スクリプト】 仮想ページングを有効にした状態ではSetActiveCellメソッドが正常に機能しない
対象製品
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);
}
【現象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)で修正済み。