不是不能加代码,而是你加的代码有问题。
不仅有问题,而且“申请”表的“DataColChanged“存在很多无用的代码,可以说是不堪入目。
你也算是元老级用户了,不能总是不求甚解地拼凑代码了,应该好好看看帮助的。
首先这段代码有意义吗:
If e.DataCol.Name = "林种" OrElse e.DataCol.Name = "亚林种" Then
Dim dr As DataRow
'在行政区域表查找所输入省市和县市的行
dr = DataTables("林种").Find("[林种] = '" & e.DataRow("林种") & "' And [亚林种] = '" & e.DataRow("亚林种") & "'")
End If
还有一个事件,这么多:
Dim dr1 As DataRow = e.DataRow
Dim dr2 As DataRow = e.DataRow
Dim dr3 As DataRow = e.DataRow
Dim dr4 As DataRow = e.DataRow
实在是有点那个了,并非每次应用,都要重新定义一个变量的,只要一个就行:
Dim dr As DataRow = e.DataRow
你最大的错误在于这段,也是导致你运行出错的原因:
If CurrentTable.current("身份证号").length <> 18 Then
MessageBox.Show("请录入18位身份证号!", "提示")
End If
首先你的表已经初始化了,CurrentTable.Current可能是Nothing,当然出错,其次DataColChanged是针对DataTable的事件,你在这里使用CurrentTable.Current很不严谨,因为CurrentTable.Current表示的是选定表的选定行,并非一定就是发生变化的行,甚至可能还不是发生变化的表。而且DataColChanged输在数据修改成功后出发,你还验证个啥?
所以这一段应该删除。
有很多地方可以写代码来规范用户输入的,可以在DataColChanging事件:
If e.DataCol.Name = "身份证号" AndAlso e.NewValue.Length < 18
MessageBox.Show("请录入18位身份证号!", "提示")
e.Cancel = True
End If
也可以是ValidateEdit事件,这样写:
If e.Col.Name = "身份证号" AndAlso e.Text.Length < 18
MessageBox.Show("请录入18位身份证号!", "提示")
e.Cancel = True
End If
后面的那些判断,都不应该出现在DataColChanged事件中,原因是一样:既然修改已经成为现实,你还验证个啥?
最后我帮你修改一下代码.
DataColChanging代码为:
Dim dr As DataRow = e.DataRow
If e.DataCol.Name = "身份证号" AndAlso e.NewValue.Length < 18
MessageBox.Show("请录入18位身份证号!", "提示")
e.Cancel = True
End If
If e.DataCol.Name = "是否为退耕还林" And dr("林种") <> "防护林" AndAlso dr("林种") <> "经济林" Then
If e.NewValue = True Then
MessageBox.Show("退耕还林只有防护林和经济林!", "提示")
e.Cancel = True
End If
End If
If e.DataCol.Name = "是否重点公益林" And dr("林种") <> "防护林" Then
If e.NewValue = True Then
MessageBox.Show("重点公益林只有防护林!", "提示")
e.Cancel = True
End If
End If
If e.DataCol.Name = "是否地方公益林" And dr("林种") <> "防护林" Then
If e.NewValue = True Then
MessageBox.Show("地方公益林只有防护林!", "提示")
e.Cancel = True
End If
End If
If e.DataCol.Name = "是否为退耕还林" And dr("林分起源") <> "人工林" Then
If e.NewValue = True Then
MessageBox.Show("退耕还林只有人工林!", "提示")
e.Cancel = True
End If
End If
DataColChanged事件代码:
If e.DataCol.Name = "乡名" Then
Dim dr As DataRow = DataTables("人员").Find("[乡名] = '" & e.DataRow("乡名") & "' ")
If dr IsNot Nothing Then
e.DataRow("填证机关经办人") = dr("填证机关经办人")
e.DataRow("填证机关负责人") = dr("填证机关负责人")
e.DataRow("调查人") = dr("调查人") '
End If
End If
我花了差不多一个小时来回你这个帖子,说了很多,希望你能重视。
有些话说得也不中听,如果是接触狐表才几个月的用户,我是不会这么说的,但你是元老级的用户,对你的要求和期待自然不一样。
[此贴子已经被作者于2010-11-29 8:33:38编辑过]