以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  一年内同一企业名称禁止重复输入  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=133811)

--  作者:deliangzhaoe
--  发布时间:2019/4/21 9:06:00
--  一年内同一企业名称禁止重复输入
一年内同一企业名称不能输入两次,datacolchanged设置了如下代码:
\'本年内企业名称禁止重复
If e.DataCol.Name = "企业名称" Then
    Dim filter As String = "年度 = \'" & Date.Today.year & "\'"
    If e.DataRow("企业名称") = Nothing Then
        filter &= " and 企业名称 is null"
    Else
        filter &= " and 企业名称 = \'" & e.DataRow("企业名称") & "\'"
    End If
    Dim nr As DataRow = DataTables("安全费用提取").Find(filter)
    If nr IsNot Nothing Then
        e.Cancel = True \'那么取消输入并提示用户
        Dim Result As DialogResult
        Result = MessageBox.Show("本年度本公司已添加了安全费用提取记录,禁止重复添加!    要删除当前行吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
        If Result = DialogResult.Yes Then
            Tables("安全费用提取").Current.Delete
        Else
        End If
    End If
End If

代码有问题:
1.企业名称不重复时,也提示重复
2.重复并删除时报错:
.NET Framework 版本:2.0.50727.5420
Foxtable 版本:2018.10.9.1
错误所在事件:表,安全费用提取,DataColChanged
详细错误信息:
调用的目标发生了异常。
此行已从表中移除并且没有任何数据。BeginEdit() 将允许在此行中创建新数据

请老师帮忙将代码修改一下,谢谢!

--  作者:有点色
--  发布时间:2019/4/21 18:07:00
--  

1、

 

Dim nr As DataRow = DataTables("安全费用提取").Find(filter)

 

改成

 

Dim nr As DataRow = DataTables("安全费用提取").Find(filter, 1)

 

2、

 

Tables("安全费用提取").Current.Delete

 

改成

 

e.datarow.Delete

 

3、尽量不要在datacolchanged事件删除行,不然如果你有代码循环给各列赋值,都会报错(你删除行了,再赋值,自然报错)


--  作者:deliangzhaoe
--  发布时间:2019/4/21 18:50:00
--  
好的,谢谢