セルの編集後にデータが変更されたかどうかを取得する方法はありますか?

文書番号 : 38965     文書種別 : 使用方法     登録日 : 2015/07/02     最終更新日 : 2015/07/02
文書を印刷する
対象製品
SPREAD for Windows Forms 8.0J
詳細
ActiveX版のSPREADでは、EditModeイベントのChangeMade引数により、データが変更されたかどうかを取得することができます。このEditModeイベントは.NET版のSPREADでは、EditModeOnとEditModeOffの2つのイベントに分けられていますが、ChangeMade引数に代わる引数やプロパティはありません。ただし、.NET版ではデータモデルを使用して、同等の処理を実現できます。

セルのデータを変更すると、データモデルのChangedイベント引数のTypeプロパティには、CellsUpdatedが設定されます。またイベントは次の順番に発生します。

EditModeOn
datamodel_Changed
EditModeOff

このためフラグ変数を利用して、編集によりデータが変更されたかどうかを調べることができます。

◎サンプルコード(VB)
Imports FarPoint.Win.Spread.Model

Dim WithEvents datamodel As DefaultSheetDataModel
Dim bUpdate As Boolean

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  datamodel = FpSpread1.ActiveSheet.Models.Data
End Sub

Private Sub datamodel_Changed(ByVal sender As Object, ByVal e As SheetDataModelEventArgs) Handles datamodel.Changed
  If e.Type = SheetDataModelEventType.CellsUpdated Then
    bUpdate = True
  End If
End Sub

Private Sub FpSpread1_EditModeOff(ByVal sender As Object, ByVal e As System.EventArgs) Handles FpSpread1.EditModeOff
  If bUpdate Then
    Debug.WriteLine("データは変更されました。")
  Else
    Debug.WriteLine("データは変更されませんでした。")
  End If
End Sub

Private Sub FpSpread1_EditModeOn(ByVal sender As Object, ByVal e As System.EventArgs) Handles FpSpread1.EditModeOn
  bUpdate = False
End Sub


◎サンプルコード(C#)
using FarPoint.Win.Spread.Model;

private DefaultSheetDataModel datamodel;
private bool bUpdate;

public Form1()
{
  // ~記載省略~
  datamodel = (DefaultSheetDataModel)fpSpread1.Sheets[0].Models.Data;
  datamodel.Changed += new SheetDataModelEventHandler(this.datamodel_Changed);
}

private void datamodel_Changed(object sender, SheetDataModelEventArgs e)
{
  if (e.Type == SheetDataModelEventType.CellsUpdated)
    bUpdate = true;
}

private void fpSpread1_EditModeOff(object sender, System.EventArgs e)
{
  if (bUpdate)
    Console.WriteLine("データは変更されました。");
  else
    Console.WriteLine("データは変更されませんでした。");
}

private void fpSpread1_EditModeOn(object sender, System.EventArgs e)
{
  bUpdate = false;
}