Private Sub refreshTSMI_addToCase() ‘ 根据当前界面dgv中的case ID 刷新右键菜单 AddToCase
Dim listCaseIDs As List(Of Integer) = getDgvCaseIDs() ‘ 获取当前dgv 中的 case列表
‘ 上面获取了当前的CaseID
‘ 下面将这些 caseID 作为菜单的选项
TSMI_AddToCase.DropDownItems.Clear() ‘ 先清空菜单
‘ 在右键菜单 AddToCaseToolStripMenuItem 中添加一个 子菜单项,显示为 New; 当点击此项时,其 sender.name也是 New
‘ 注意:左边的 New 是显示在子菜单上的文字, 右边的 New 是这个子菜单的名字sender.name
TSMI_AddToCase.DropDownItems.Add("New", Nothing, AddressOf clickTSM_addToCase).Name = "New"
For Each _caseId In listCaseIDs ‘ 将列表中的内容 加入菜单
TSMI_AddToCase.DropDownItems.Add(_caseId, Nothing, AddressOf clickTSM_addToCase).Name = _caseId
Next
End Sub
‘ 当鼠标右键点击进入菜单 Add To New Case 时,将当前选中的这几笔交易加入到某个 可疑Case中
Private Sub clickTSM_addToCase(ByVal sender As Object, ByVal e As System.EventArgs) Handles TSMI_AddToCase.Click
‘MessageBox.Show(" menuItem_Click " & sender.name)
If dtgAML.SelectedRows.Count = 0 Then ‘ 如果当前没有选择任何一笔交易
MessageBox.Show("请选择至少一个alert,然后再添加入case", "一个case至少一个alert")
Return ‘ 返回
End If
‘If dtgAML.SelectedRows.Count > 10 Then ‘ 如果当前选择的交易笔数太多
‘ MessageBox.Show("目前选择的alert太多,请选择不要超过10笔,然后再加入case")
‘ Return ‘ 返回
‘End If
For Each _row As DataGridViewRow In dtgAML.SelectedRows ‘ 对于所选中的这些行
If IsNothing(_row.HeaderCell.Value) Then
Continue For ‘ 跳过去
End If
If IsNumeric(_row.HeaderCell.Value.ToString) Then ‘ 如果其行头是 数值(说明已经加入case了)
MessageBox.Show(" 当前有些alert已经从属于某个case,请先 remove from case ,然后再添加 ", "不可重复添加alert")
Return
End If
If UserType = UTYPE_CMPLCEB Or UserType = UTYPE_CMPLCEC Then
Dim strSus As String = _row.Cells(dtg_suspicious_index).Value.ToString.Trim
If strSus = "N" Then
MessageBox.Show(" 当前有些alert的 " & UserType.ToString & " Suspicious选项为N,这样无法add to Case;请先设为Y,然后再添加 ", "不可添加不可疑的alert")
Return
End If
End If
Next
‘ 现在已经有几笔交易被选中了,而且这些交易不属于任何一个case,并且都是可疑交易
Dim caseID As Integer = 0 ‘ caseID(如果为0,就是要将这几笔交易添加入新的case)
If IsNumeric(sender.name) Then ‘ 如果 sender.name 是数值
‘ 这个名字就是 caseID , 将这些交易加入到已有的 case 中
caseID = CInt(sender.name) ‘ 取得 caseID
End If
Dim dgvCaseIDs As List(Of Integer) = getDgvCaseIDs()
If caseID <> 0 And dgvCaseIDs.Contains(caseID) = False Then
MessageBox.Show("这个case " & caseID & " 可能已经被提交,不能再增加新的内容")
Return
End If
Dim _dt As DataTable = getDataTableFromDgv(dtgAML, True) ‘ 获取当前dgv的选中的那些行组成的 dataTable
‘ 首先实例化对象(安排一个员工去干活),将这几笔交易加入到 新的(caseID 为 0) 或者 已有的 case 中
Dim frm As _frmSuspiciousAlert_case = New _frmSuspiciousAlert_case(_dt, caseID, dgvCaseIDs)
‘ 这里加了个委托,当操作成功时(成功将若干笔交易加入case),返回一个信号,以便改变 dgv的显示状态(行的颜色,行头,等等)
‘ 委托5: 对员工(_frm2)交待(registerDelegate):你干完活要通知经理(CallBackManager),以便经理这里收尾工作(doThingWhenCallBack)
frm.registerDelegate_saveCase(New CallBackManager_saveCase(AddressOf changeDGV_bySaveCaseResults))
frm.registerDelegate_submitCase(New CallBackManager_submitCase(AddressOf submitAlerts1_tryCatch))
frm.registerDelegate_rejectCase(New CallBackManager_rejectCase(AddressOf rejectAlerts1))
‘frm.Show() ‘ 员工干活去了
‘ 注意,如果用了上面的show,则在这个员工干活期间,经理处于空闲状态,可能又会让其他员工对同一条alert有重复的操作,可能造成混乱
‘ 注意,这里应该用下面的 ShowDialog,在员工干活期间,让经理处于等待状态; 20200110
frm.ShowDialog() ‘ 员工干活去了
End Sub
原文地址:https://www.cnblogs.com/gaoleionline/p/12175340.html