Its Documented that :

(( Validating a new value in a column is as easy as trapping the ColumnChanging event, checking the new value (which can be found in the ProposedValue property of the object passed in the second argument to the event handler), and throwing an exception if it can’t be accepted. For example, the following code rejects future dates assigned to the BirthDate column:

Private Sub DataTable_ColumnChanging(ByVal sender As Ob ject, _
ByVal e As DataColumnChangeEventArgs) Handles DataT able.ColumnChanging
If e.Column.ColumnName = "BirthDate" Then
If CDate(e.ProposedValue) > Date.Now Then
Throw New ArgumentException("Invalid birth date
value")
End If
End If
End Sub

If the user attempts to enter an invalid birth date in the DataGrid, the old value is automatically restored when the caret leaves the grid cell. Note that the DataGrid absorbs the exception and no error message is shown to the user. Interestingly, you can check the value and throw the exception even in the ColumnChanged event handler: in this case, the value is rejected only when the caret leaves the row (not the column).)) End Document

This works fine for me for data entered manually (by selecting a cell and writing to it)

but , when i entered Data by Code ( under buton click or through combo selection) using:

DataGrid1.Item(DataGrid1.CurrentCell) = String

and using Throw to cancel the entered data

validation will pop up error message then Break execution

Any idea ???