能认认真真看帮助文档吗?
禁止多列输入重复值
假定产品表有型号和规格两列,禁止输入型号和规格相同的产品,可以将这个表的DataColChanging事件代码设置为:
Select Case e.DataCol.name
Case "型号","规格"
Dim xh As String
Dim gg As String
If e.DataCol.Name= "型号" Then
xh = e.NewValue
gg = e.DataRow("规格")
Else
gg = e.NewValue
xh = e.DataRow("型号")
End If
If xh > "" AndAlso gg > "" Then
Dim dr As DataRow = e.DataRow
If e.DataTable.Find("型号 = '" & xh & "' And 规格 = '" & gg & "'") IsNot Nothing Then
MessageBox.Show("已经存在相同型号和规格的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
e.Cancel = True
End If
End If
End Select
上面的代码有点繁琐。
我们可以变通一下,改为DataColChanged事件事件代码,同样可以禁止输入型号和规格相同的行,而且代码会简洁一些:
Select Case e.DataCol.name
Case "型号","规格"
Dim dr As DataRow = e.DataRow
If dr.IsNull("型号") = False AndAlso dr.IsNull("规格") = False Then
If e.DataTable.Compute("Count([_Identify])","型号 = '" & dr("型号") & "' And 规格 = '" & dr("规格") & "'") > 1 Then
MessageBox.Show("已经存在相同型号和规格的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
e.DataRow(e.DataCol.Name) = e.OldValue '取消输入
End If
End If
End Select
不过两者还是有所差别的,DataColChanging是在值发生变化前进行判断,属于提前拦截,而DataColChanged是在值发生变化后判断,属于事后弥补。