クライアント側でのロック設定が有効にならない
対象製品
SPREAD for ASP.NET 8.0J
状況
修正済み
詳細
クライアント側でのロック設定が有効になりません。本現象はボタン型セル、ハイパーリンク型セルおよびクラウド型セルで発生します。
【再現コード】
------------------------------------
Webフォームクラス
------------------------------------
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Page.IsPostBack Then Return
' HyperLinkCellType型セルの設定
Dim hlCell As New FarPoint.Web.Spread.HyperLinkCellType()
hlCell.NavigateUrl = "test"
hlCell.Target = "_blank"
FpSpread1.ActiveSheetView.Columns(0).CellType = hlCell
' ロックの設定
FpSpread1.AllowClientUnlock = True
FpSpread1.ActiveSheetView.Columns(0).Locked = True
End Sub
------------------------------------
クライアント側スクリプト
------------------------------------
document.onreadystatechange = function () {
if (document.readyState == "complete") {
var spread = document.getElementById("FpSpread1");
if (spread.addEventListener) {
spread.addEventListener("DataChanged", DataChanged, false);
} else {
spread.onDataChanged = DataChanged;
}
}
}
function DataChanged(e) {
e = e || window.event;
if (e.cell.cellIndex == 1) {
var spread = document.getElementById("FpSpread1");
var row = e.cell.parentNode.getAttribute("FpKey");
// ロック解除
spread.Cells(row, 0).SetLocked(false);
// ロック再設定
spread.Cells(row, 0).SetLocked(true);
}
}
【再現コード】
------------------------------------
Webフォームクラス
------------------------------------
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Page.IsPostBack Then Return
' HyperLinkCellType型セルの設定
Dim hlCell As New FarPoint.Web.Spread.HyperLinkCellType()
hlCell.NavigateUrl = "test"
hlCell.Target = "_blank"
FpSpread1.ActiveSheetView.Columns(0).CellType = hlCell
' ロックの設定
FpSpread1.AllowClientUnlock = True
FpSpread1.ActiveSheetView.Columns(0).Locked = True
End Sub
------------------------------------
クライアント側スクリプト
------------------------------------
document.onreadystatechange = function () {
if (document.readyState == "complete") {
var spread = document.getElementById("FpSpread1");
if (spread.addEventListener) {
spread.addEventListener("DataChanged", DataChanged, false);
} else {
spread.onDataChanged = DataChanged;
}
}
}
function DataChanged(e) {
e = e || window.event;
if (e.cell.cellIndex == 1) {
var spread = document.getElementById("FpSpread1");
var row = e.cell.parentNode.getAttribute("FpKey");
// ロック解除
spread.Cells(row, 0).SetLocked(false);
// ロック再設定
spread.Cells(row, 0).SetLocked(true);
}
}
回避方法
Service Pack 3(v8.0.4004.2010)で修正済み。
Service Pack 3(v8.0.4004.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
Cellオブジェクトに対してsetAttributeメソッドを使い明示的にreadonlyの属性を設定します。
------------------------------------
クライアント側スクリプト
------------------------------------
function DataChanged(e) {
e = e || window.event;
if (e.cell.cellIndex == 1) {
var spread = document.getElementById("FpSpread1");
var row = e.cell.parentNode.getAttribute("FpKey");
// ロック解除
spread.Cells(row, 0).SetLocked(false);
// ロック再設定
spread.Cells(row, 0).SetLocked(true);
// 回避策
if (($$.browser.ie != true) || (($$.browser.ie == true) && ($$.browser.ieversion > 8))) {
spread.Cells(row, 0).setAttribute("fpcelltype", "readonly");
}
}
}
Service Pack 3(v8.0.4004.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
Cellオブジェクトに対してsetAttributeメソッドを使い明示的にreadonlyの属性を設定します。
------------------------------------
クライアント側スクリプト
------------------------------------
function DataChanged(e) {
e = e || window.event;
if (e.cell.cellIndex == 1) {
var spread = document.getElementById("FpSpread1");
var row = e.cell.parentNode.getAttribute("FpKey");
// ロック解除
spread.Cells(row, 0).SetLocked(false);
// ロック再設定
spread.Cells(row, 0).SetLocked(true);
// 回避策
if (($$.browser.ie != true) || (($$.browser.ie == true) && ($$.browser.ieversion > 8))) {
spread.Cells(row, 0).setAttribute("fpcelltype", "readonly");
}
}
}