Ver5.0にはありません。
実現するにはCellValueChanged イベント を監視し、IsCurrentCellDirtyで変更がコミットされた場合にフラグを立てます。
CellValueChangedイベントはユーザによりセルの値が変更された場合に発生します。
Public ClassCustomMultiRowSheet Inherits GrapeCity.Win.MultiRow.GcMultiRow Private _IsModified As Boolean Public ReadOnly Property Modified() As Boolean Get Return Me._IsModified End Get End Property Protected Overrides Sub OnCellValueChanged(ByVal e As GrapeCity.Win.MultiRow.CellEventArgs) If Me.IsCurrentCellDirty Then Me._IsModified = True End If MyBase.OnCellValueChanged(e) End Sub End Class
しかし、ユーザー定義セルでOnCellFormattingメソッドで書式設定などを行うとCellValueChangedイベントが発生するため、
上記の方法ではユーザによるセルの値の変更を判定できません。
そのため、OnCellEnterメソッドで変更前の値を記憶しておき、OnCellEndEditで変更後の値と比較すると
ユーザによるセルの変更を判定できます。
Public ClassCustomMultiRowSheet Inherits GrapeCity.Win.MultiRow.GcMultiRow Private _OriginalValue As Object Private _IsModified As Boolean Public ReadOnly Property Modified() As Boolean Get Return Me._IsModified End Get End Property Protected Overrides Sub OnCellEnter(ByVal e As GrapeCity.Win.MultiRow.CellEventArgs) '変更前の値を記憶します。 Me._OriginalValue = Me.GetValue(e.RowIndex, e.CellIndex) MyBase.OnCellEnter(e) End Sub Protected Overrides Sub OnCellEndEdit(ByVal e As GrapeCity.Win.MultiRow.CellEndEditEventArgs) 'OnCellEnterイベントで記憶した値と比較し、セルの値が変更されていれば 'ユーザがセルの値を変更したかどうかのフラグを立てます。 'すでにフラグがたっている場合は比較を行いません。 If Me._isModified = False Then Dim currentValue As Object = Me.GetValue(e.RowIndex, e.CellIndex) If Me._originalValue Is Nothing Xor currentValue Is Nothing Then Me._isModified = True ElseIf Me._originalValue IsNot Nothing And currentValue IsNot Nothing Then If Me._originalValue.ToString <> currentValue.ToString Then Me._isModified = True End If End If End If MyBase.OnCellEndEdit(e) End Sub End Class
0 件のコメント:
コメントを投稿