VB.net : 根据当前界面dgv中的case ID 刷新右键菜单 AddToCase

    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