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

猜你喜欢

转载自www.cnblogs.com/gaoleionline/p/12175340.html