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