クライアント側でのロック設定が有効にならない

文書番号 : 39529     文書種別 : 不具合     登録日 : 2016/08/19     最終更新日 : 2016/09/09
文書を印刷する
対象製品
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);
    }
  }
回避方法
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");
      }
    }
  }