You shouldn't be using CellLeave. You should be using CellValidating.

Also, to ensure that a string is a valid representation of a number you should not be converting and catching exceptions on failure. You should be calling the TryParse method of the appropriate numeric type. If the number needs to be a valid Short then use Short.TryParse.