以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请专家指导  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=10500)

--  作者:倪惠明
--  发布时间:2011/6/9 9:22:00
--  请专家指导

在数据表中新增数据时,判断该单位数据已经存在的话,则删除新增的行。但下面的代码为什么不能达到要求。

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


--  作者:狐狸爸爸
--  发布时间:2011/6/9 9:35:00
--  

你做个简单例子上来,我帮你看看问题出在哪。

一般不应该在DataColChanged事件中删除行的。


--  作者:倪惠明
--  发布时间:2011/6/9 9:46:00
--  
我是在DataColChanged事件中做的,是想把刚新增的行给删除,可实际删除的是以前的数据行,如果要将刚新增的行删除应如何写代码。谢谢!
--  作者:狐狸爸爸
--  发布时间:2011/6/9 10:17:00
--  

我不太明白你的意思,增加行的时候,增加的是一个空行,然后输入各列的数据,难道你是在输入数据的时候,删除刚刚增加的行?


--  作者:blackzhu
--  发布时间:2011/6/9 10:31:00
--  
你换个事件做,就是说先判断里面有没有重复值,如有,停止添加行,如没有增加一行.
--  作者:倪惠明
--  发布时间:2011/6/9 11:08:00
--  
是5楼说的意思,如果存在重复的值就必须停止增加行,如没有则正常增加行。但要判断是否有重复值又必须先获的单位代码,所以
我在DataColChanged事件中想把是重复值的刚新增的行给删除,也就是要取消前面新增行操作。可实际删除的是以前的数据行而不是刚新增的行。谢谢!

--  作者:blackzhu
--  发布时间:2011/6/9 12:10:00
--  
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

因为你是在新增行里数据数据时判断是不是有重覆的数据,所以删除的应该就是当前行.

--  作者:倪惠明
--  发布时间:2011/6/9 14:35:00
--  

还是不行,看来只得用其他方法了。谢谢各位了!


--  作者:blackzhu
--  发布时间:2011/6/9 16:23:00
--  
我的代码我测试可以的呀.你是新增输入数据的时候,提示重覆.然后删除呀,因为新增时的光标在新增行,也就当前行,所以也就删除当前行了.
--  作者:倪惠明
--  发布时间:2011/6/17 20:16:00
--  
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,请狐狸爸爸解释一下。