这样的用法在逻辑上是有问题的:
'添加新客户
If Result = DialogResult.Yes Then
Dim cname As String
Dim newctarget As DataRow
Dim newcsource As DataRow
For Each ccode As String In ccodes
cname = DataTables("temperorder").getcomboliststring("clientname","[client] = '" & ccode & "'")
newcsource = DataTables("temperorder").Find("[client] = '"& ccode &"'")
newctarget = DataTables("CLIENT").addnew()
newctarget("name") = newcsource("clientname")
上面赋值后会触发datacolchanged,弹出编辑窗口,由于是模式窗口,下面的代码被阻塞,窗口点击取消,这行被删除,关闭窗口后会继续执行下面的代码,下面代码还给这个被删除的行赋值,自然就出错了。
newctarget("code") = newcsource("client")
Next
Else
个人建议应该在窗口里添加一个客户表的副本,然后新的客户全部在副本里新增,这个过程中不要弹出编辑窗口。导入完毕后,点击副本的行再弹出编辑窗口。