e.Row全部改为e.DataRow,不同事件的e参数是不一样的,不要混用:http://www.foxtable.com/webhelp/scr/0604.htm
另外代码这样可能更合理一点
Select Case e.DataCol.Name
Case "引体向上值","年级"
If e.DataRow.Isnull("引体向上值") OrElse e.DataRow.Isnull("年级") Then
e.DataRow("引体向上差值") = Nothing
Else
Dim v As Integer = 0
If e.DataRow("年级") = "高一" Then
v = 16
ElseIf e.DataRow("年级") = "高二"Then
v = 17
ElseIf e.DataRow("年级") = "高三" Then
v = 18
Else
MessageBox.show("未选择对应年级,请重新输入!")
Return
End If
e.DataRow("引体向上差值") = e.DataRow("引体向上值") - v
End If
End Select