我在窗口中用ListView 来显示筛选后的数据,用户选择、保存后,会调用addSubmitFileLog,生成一个日志。
大多数情况下,没有问题。
偶尔会发生,明明ListView 中只有一条数据,addSubmitFileLog被执行2遍。
为了解决这个问题,我增加了一个INSERT调试的函数。记录当时的执行情况。
发现出错时,都被执行了两遍。
调试表中的数据
1 主动提交_签名 A001 1 新增
2 主动提交_签名 A001 2 新增
3 addSubmitFileLog A001
4 主动提交_签名 A001 1 新增
5 主动提交_签名 A001 2 新增
6 addSubmitFileLog A001
请袍哥帮忙看看啊,可能的错误出在哪里
执行的代码:
Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
For Each vr As WinForm.ListViewRow In lvw.CheckedRows
Dim dr As DataRow = DataTables("主动提交").SQLFind("[编码] = '" & vr("编码") & "'")
Functions.Execute("INSERT调试","主动提交_签名",vr("名称"),"1","新增") ‘向调试表中加一行
vr.CellUseRowStyle = False
If dr Is Nothing Then
vr("状态") = "确认失败,[主动提交]中无对应的记录!"
vr.Cells("状态").backColor = Color.red
Continue For
Else
dr("提交状态") = "TJZT02"
dr.save
vr("状态") = "确认成功"
vr.Cells("状态").backColor = Color.white
Functions.Execute("INSERT调试","主动提交_签名",vr("名称"),"2","新增") ‘向调试表中加一行
Functions.Execute("addSubmitFileLog",xxx,xxx) ’重复执行出现在这里
End If
Next
数据加载的代码:
lvw.Rows.Clear() '清除原来的行
lvw.CheckBoxes = True
lvw.GridLines = True '显示网格线
Dim c As WinForm.ListViewColumn
c = lvw.Columns.Add()
c.Name = "名称" '指定列名
c.Text = "名称" '指定标题,这里标题和列名相同
c.Width = 500 '指定列宽
c = lvw.Columns.Add()
c.Name = "路径" '指定列名
c.Text = "路径" '指定标题,这里标题和列名相同
c.Width = 150 '指定列宽
c = lvw.Columns.Add()
c.Name = "状态" '指定列名
c.Text = "状态" '指定标题,这里标题和列名相同
c.Width = 100 '指定列宽
c = lvw.Columns.Add()
c.Name = "编码" '指定列名
c.Text = "编码" '指定标题,这里标题和列名相同
c.Width = 200 '指定列宽
Dim drs As List(Of DataRow)
drs = DataTables("主动提交").Select("[提交状态] = 'TJZT01'")
For Each dr As DataRow In drs
Dim r As WinForm.ListViewRow = lvw.Rows.Add() '增加一行
r("名称") = dr("提交文件")
r("路径") = dr("文件当前路径")
r("编码") = dr("编码")
Next
lvw.ResumeRedraw() '恢复绘制