自動ソート機能による並べ替えを行うと、セルの値を変更しても自動再計算が行われない場合がある
対象製品
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
【再現手順】
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();
}
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();
}