Undo range of cell

Posted by: patrik on 12 March 2018, 3:03 am EST

    • Post Options:
    • Link

    Posted 12 March 2018, 3:03 am EST

    This remove everything, but I want only to clear.

    Dim cr As FarPoint.Win.Spread.Model.CellRange
    cr = FpSpread1.ActiveSheet.GetSelection(0)
    Dim remove As DeleteData = New DeleteData(FpSpread1.Sheets(0), cr)
    FpSpread1.UndoManager.PerformUndoAction(remove)
    

    I want to only put value to nothing, is it possible?

    Dim cr As FarPoint.Win.Spread.Model.CellRange
    cr = FpSpread1.ActiveSheet.GetSelection(0)
    Dim remove As DeleteData = New DeleteData(FpSpread1.Sheets(0), cr)
    FpSpread1.ActiveSheet.Cells(cr.Row, cr.Column, cr.Row + cr.RowCount - 1, cr.Column + cr.ColumnCount - 1).Value = Nothing
    
  • Posted 12 March 2018, 9:07 pm EST

    Hello,

    Setting the Range Value to Nothing should work in your case. Also you can set the range Text as “” to clear cell data.

    You can also use the ClearData() method of DefaultSheetDataModel class to clear a a cell range. For example:

    FarPoint.Win.Spread.Model.DefaultSheetDataModel dataModel = new FarPoint.Win.Spread.Model.DefaultSheetDataModel(5, 5);

    fpSpread1.ActiveSheet.Models.Data = dataModel;

    dataModel.ClearData(0, 0, 3, 3);

    Thanks,

    Deepak Sharma

  • Posted 15 March 2018, 9:07 pm EST

    Are this working with undomanager?

  • Posted 19 March 2018, 2:31 am EST

    Hello,

    To get it to work with Undo you will have to create a custom Clear undo action. Please refer to the code below:

    
    Public Class clearRangeAction
        Inherits FarPoint.Win.Spread.UndoRedo.UndoAction
        Dim sheetView As FarPoint.Win.Spread.SheetView
        Dim cellRange As FarPoint.Win.Spread.Model.CellRange
        Dim rowInfo As FarPoint.Win.Spread.RowClipInfoRange
        Dim columnInfo As FarPoint.Win.Spread.ColumnClipInfoRange
        Dim cellInfo As FarPoint.Win.Spread.CellInfoRange
        Public Sub New()
    
        End Sub
        Public Sub New(ByVal sheetView As FarPoint.Win.Spread.SheetView, ByVal cellRange As FarPoint.Win.Spread.Model.CellRange)
            Me.sheetView = sheetView
            Me.cellRange = cellRange
        End Sub
    
        Public Overrides Function PerformUndoAction(ByVal sender As Object) As Boolean
            Dim spreadView As FarPoint.Win.Spread.SpreadView = Nothing
            If TypeOf sender Is FarPoint.Win.Spread.SpreadView Then
                spreadView = CType(sender, FarPoint.Win.Spread.SpreadView)
            Else
                Return False
            End If
    
            If sheetView Is Nothing Then
                sheetView = spreadView.GetSheetView
            End If
            If (SaveUndoState()) And Not (sheetView Is Nothing) Then
                sheetView.ClearRange(cellRange.Row, cellRange.Column, cellRange.RowCount, cellRange.ColumnCount, False)
                Return True
            End If
            Return False
        End Function
    
        Protected Overrides Function SaveUndoState() As Boolean
            If Not (sheetView Is Nothing) Then
                If cellRange Is Nothing Then
                    cellRange = sheetView.GetSelection(0)
                    If cellRange Is Nothing Then
                        cellRange = New FarPoint.Win.Spread.Model.CellRange(sheetView.ActiveRowIndex, sheetView.ActiveColumnIndex, 1, 1)
                    End If
                End If
                If Not (cellRange Is Nothing) Then
                    If (cellRange.IsValidRange(sheetView, False)) Then
                        cellInfo = FarPoint.Win.Spread.CellInfoRange.FromCellRange(sheetView, cellRange, rowInfo, columnInfo)
                    End If
                End If
            End If
            Return Not (cellInfo Is Nothing)
        End Function
    
        Public Overrides Function Undo(ByVal sender As Object) As Boolean
            Dim spreadView As FarPoint.Win.Spread.SpreadView = Nothing
            If TypeOf sender Is FarPoint.Win.Spread.SpreadView Then
                spreadView = CType(sender, FarPoint.Win.Spread.SpreadView)
            Else
                Return False
            End If
    
            If (cellRange.IsValidRange(sheetView, False)) Then
                If Not (cellInfo Is Nothing) Then
                    Dim dataObject As New DataObject()
                    dataObject.SetData(cellInfo)
                    If Not (columnInfo Is Nothing) Then
                        dataObject.SetData(columnInfo)
                    End If
                    If Not (rowInfo Is Nothing) Then
                        dataObject.SetData(rowInfo)
                    End If
                    If Not (sheetView.ActiveRowIndex = cellRange.Row) Or Not (sheetView.ActiveColumnIndex = cellRange.Column) Then
                        sheetView.SetActiveCell(cellRange.Row, cellRange.Column)
                    End If
                    sheetView.ClipboardPaste(FarPoint.Win.Spread.ClipboardPasteOptions.All, dataObject)
                    Return True
                End If
            End If
            Return False
        End Function
    End Class
    
    

    Thanks,

    Deepak Sharma

Need extra support?

Upgrade your support plan and get personal unlimited phone support with our customer engagement team

Learn More

Forum Channels