【スクリプト】サーバーにポストバックせずにクライアント側で表計算を行なうことができますか?

文書番号 : 22186     文書種別 : 使用方法     最終更新日 : 2006/07/04
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
FpSpread クラスのClientAutoCalculationプロパティをTrueに設定することで数式の再計算をAJAXで処理できます。
この場合、データを変更するとサーバー側へのコールバックが発生します。
ポストバックの場合ページ全体を更新することになりますが、コールバックではSPREADのみ更新します。

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

    FpSpread1.ClientAutoCalculation = True
    FpSpread1.ActiveSheetView.Cells(0, 0).Value = 10
    FpSpread1.ActiveSheetView.Cells(1, 0).Value = 30
    FpSpread1.ActiveSheetView.Cells(2, 0).Formula = "SUM(A1:A2)"
  End Sub

【C# サンプルコード】
    private void Page_Load(object sender, System.EventArgs e)
    {
      if (IsPostBack)
      {
        return;
      }

      FpSpread1.ClientAutoCalculation = true;
      FpSpread1.ActiveSheetView.Cells[0, 0].Value = 10;
      FpSpread1.ActiveSheetView.Cells[1, 0].Value = 30;
      FpSpread1.ActiveSheetView.Cells[2, 0].Formula = "SUM(A1:A2)";
    }


なお、上記方法よりもレスポンスを向上させたい(コールバックもポストバックも発生させない(サーバーと通信しない)で再計算したい)場合、スクリプトで計算処理を実装する方法があります。
※この方法では「SUM」など製品の組込み関数を使用することはできません。なぜならばSPREADの計算機能はサーバー側アセンブリで実装されているため、これを使用するにはサーバーとの通信が不可欠だからです。

例えば次のようなスクリプトを実装します(この例ではデータが変更される度に"A1+A2"を実行して結果を出力します)。

【JavaScript サンプルコード】
<script language=javascript>
  function window.onload(){
   var spread = document.all("FpSpread1");
   if (spread!=null) {
    spread.onDataChanged = dataChanged;
   }
  }
  
  function dataChanged() {
   var spread = document.all("FpSpread1");
   var a1 = Number(spread.GetValue(0,0));
   var a2 = Number(spread.GetValue(1,0));
   spread.SetValue(2,0,a1+a2, true);
  }  
</script>
キーワード
クライアント側スクリプト

この文書は、以前は次のFAQ IDで公開されていました : 9436