自動ソート機能による並べ替えを行うと、セルの値を変更しても自動再計算が行われない場合がある

文書番号 : 41309     文書種別 : 不具合     登録日 : 2017/09/05     最終更新日 : 2018/03/16
文書を印刷する
対象製品
SPREAD for ASP.NET 8.0J
状況
修正済み
詳細
自動ソート機能による並べ替えを行うと、セルの値を変更しても自動再計算が行われない場合があります。

【再現手順】
1.新規WebフォームにSPREADを配置します
2.サンプルコードをコピーしアプリケーションを実行します
3.セルD1の値を3から13に変更し値を確定します
 -- セルB1の値が15に変わります
4.A列をダブルクリックし昇順でソートします
5.A列を再度ダブルクリックし降順でソートします
6.セルD1の値を5から15に変更し値を確定します
 -- セルB1の値が変更されません(本来は19になるべきです)

【サンプルコード】
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  If Page.IsPostBack Then Return

  FpSpread1.EnableAjaxCall = True
  FpSpread1.ClientAutoCalculation = True
  FpSpread1.ActiveSheetView.AllowSort = True

  FpSpread1.ActiveSheetView.Cells(0, 1).Formula = "SUM(C1:D1)"
  FpSpread1.ActiveSheetView.Cells(1, 1).Formula = "SUM(C2:D2)"
  FpSpread1.ActiveSheetView.Cells(2, 1).Formula = "SUM(C3:D3)"

  For i As Integer = 0 To FpSpread1.ActiveSheetView.RowCount - 1
    FpSpread1.ActiveSheetView.Cells(i, 0).Text = i.ToString()
    For j As Integer = 2 To FpSpread1.ActiveSheetView.ColumnCount - 1
      FpSpread1.ActiveSheetView.Cells(i, j).Text = (i + j).ToString()
    Next
  Next
End Sub
回避方法
Service Pack 6(v8.0.4010.2010)で修正済み。

Service Pack 6より前のバージョンでは、次の回避方法が有効です。
====================================================
ClientAutoCalculationを使用せずにJavaScriptで変更をサーバーに通知し計算を行います。

------------------------------------
クライアント側スクリプト
------------------------------------
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) {
  var spread = document.getElementById("FpSpread1");
  spread.Update();
}