How to validate the cell while pasting it in a grid in WinForms GridControl?
Validate the cell while paste in grid
In WinForms GridControl, you can validate the cell during the pasting in a grid using the grid.Model.PasteCellText event and when it is invalid, set e.Cancel = true. This event is not triggered when the current cell is in Edit mode. So the ActivateCurrentCellBehavior is changed to DblClickOnCell.
The following code example illustrates validating cell during pasting.
C#
this.gridControl1.Model.PasteCellText += Model_PasteCellText; this.gridControl1.ActivateCurrentCellBehavior = GridCellActivateAction.DblClickOnCell; void Model_PasteCellText(object sender, GridPasteCellTextEventArgs e) { if (e.ColIndex == 2) { Boolean intOK = true; foreach (char c in e.Text) { if (!Char.IsDigit(c)) { intOK = false; MessageBox.Show("Only Digits are allowed in this field"); break; } } if (!intOK) { e.Cancel = true; } } }
VB
Me.gridControl1.Model.CutPaste.ClipboardFlags = Me.gridControl1.Model.CutPaste.ClipboardFlags And Not GridDragDropFlags.Styles AddHandler Me.gridControl1.Model.PasteCellText, AddressOf Model_PasteCellText Me.gridControl1.ActivateCurrentCellBehavior = GridCellActivateAction.DblClickOnCell Private Sub Model_PasteCellText(ByVal sender As Object, ByVal e As GridPasteCellTextEventArgs) If e.ColIndex = 2 Then Dim intOK As Boolean = True For Each c As Char In e.Text If Not Char.IsDigit(c) Then intOK = False MessageBox.Show("Only Digits are allowed in this field") Exit For End If Next c If Not intOK Then e.Cancel = True End If End If End Sub
When you are pasting text, for example, this is always the case in a GridDataBoundGrid or in the case of a GridControl when you copy from another object like an Excel spreadsheet, then you can use the grid.Model.PasteCellText event to validate the text that is being pasted. Otherwise when you are copying from a GridControl and pasting it in a GridControl, then by default, the style objects are copied and pasted, and PasteCellText is not raised. In this case, you can either turn off support for copying styles, allowing only text to be pasted and PasteCellText to be hit, or you can handle the grid.ClipboardPaste. To turn off style, copy and paste support in a gridcontrol, turning off this flag.
C#
//To Copy text alone this.gridControl1.Model.CutPaste.ClipboardFlags &= ~GridDragDropFlags.Styles;
VB
‘To Copy text alone Me.gridControl1.Model.CutPaste.ClipboardFlags = Me.gridControl1.Model.CutPaste.ClipboardFlags And Not GridDragDropFlags.Styles