在数据表中新增数据时,判断该单位数据已经存在的话,则删除新增的行。但下面的代码为什么不能达到要求。
If e.DataCol.Name = "dwdm" Then
Dim dr As DataRow
dr = e.DataTable.Find("dwdm = '" & e.NewValue & "'")
If dr IsNot Nothing Then
MessageBox.Show("该单位数据已经存在不能添加!")
e.Cancel=True
e.DataRow.Delete
End If
End If
你做个简单例子上来,我帮你看看问题出在哪。
一般不应该在DataColChanged事件中删除行的。
我是在DataColChanged事件中做的,是想把刚新增的行给删除,可实际删除的是以前的数据行,如果要将刚新增的行删除应如何写代码。谢谢!
我不太明白你的意思,增加行的时候,增加的是一个空行,然后输入各列的数据,难道你是在输入数据的时候,删除刚刚增加的行?
你换个事件做,就是说先判断里面有没有重复值,如有,停止添加行,如没有增加一行.
是5楼说的意思,如果存在重复的值就必须停止增加行,如没有则正常增加行。但要判断是否有重复值又必须先获的单位代码,所以
我在DataColChanged事件中想把是重复值的刚新增的行给删除,也就是要取消前面新增行操作。可实际删除的是以前的数据行而不是刚新增的行。谢谢!
If e.DataCol.Name = "dwdm"Then
Dim drs As List(Of DataRow) = DataTables("表名").Select("[dwdm] = '" & e.DataRow("dwdm") & "'")
If drs.Count - 1 > 0 Then
MessageBox.Show("该单位数据已经存在不能添加!")
CurrentTable.Current.Delete()
End If
End If
因为你是在新增行里数据数据时判断是不是有重覆的数据,所以删除的应该就是当前行.
我的代码我测试可以的呀.你是新增输入数据的时候,提示重覆.然后删除呀,因为新增时的光标在新增行,也就当前行,所以也就删除当前行了.
If e.DataCol.Name = "dwdm"Then
Dim drs As List(Of DataRow) = DataTables("表名").Select("[dwdm] = '" & e.DataRow("dwdm") & "'")
If drs.Count - 1 > 0 Then
MessageBox.Show("该单位数据已经存在不能添加!")
CurrentTable.Current.Delete()
End If
End If
因为你是在新增行里数据数据时判断是不是有重覆的数据,所以删除的应该就是当前行.
这个方法在直接输入的情况下没有问题,但如果代码是通过目录树表录入就会自动退出系统,这是不是系统的BUG,请狐狸爸爸解释一下。