Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alexandre Luccia

Listview + checkbox com validação

Recommended Posts

Efetuar verificação caso duas opções selecionadas...

forçar o usuário escolher primeiro uma opção do listview determinada.

 

Teria que fazer uma verificação assim, se objListItem.SubItems(7) = 1 estiver marcado sozinho no list e existir o objListItem.SubItems(7) = 7 podendo estar marcado ou não na listview, deverá obrigar o usuário primeiro enviar a opção objListItem.SubItems(7) = 7, agradeço muito, to apanhando de uma coisa simples... to bitolado.

 

Hoje temos o seguinte código fonte que não deixa ele selecionar mult aprovações, porém preciso fazer tambem a seguinte validação:

 

For Each objListItem In ltwOperacoesPendentes.ListItems

 

If objListItem.Checked Then

 

If blnFlag Then

MsgBox "Multi Aprovação com operações de Reset de Senha e Inclusão de Usuário não são permitidas!", vbExclamation, Me.Caption

Exit Sub

End If

 

'Na coluna 7, está o id_operacao, que indica qual operação

'(1 = cadastro de usuários e 7 = reset de senha)

'Na coluna 8, reside o tipo de operação.

If Index = 0 Then

 

If (objListItem.SubItems(7) = 1 And objListItem.SubItems(8) = "I") Or _

objListItem.SubItems(7) = 7 Then

 

'Primeiro obtém a nova senha do usuário.

strFragLSO = objListItem.SubItems(9)

lngIDOperacao = objListItem.SubItems(7)

lngIdUsuario = CapturarIDUsuarioOperacaoPendente(objListItem.SubItems(7), Right(objListItem.Key, Len(objListItem.Key) - 1))

blnFlag = True

 

End If

 

End If

 

strOperacoes = strOperacoes + IIf(strOperacoes = "", "", ",") + Right(objListItem.Key, Len(objListItem.Key) - 1)

 

End If

 

Next

 

Agradeço ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, agradeço a atenção:

 

Tenho um listview com checkbox, preciso fazer uma verificação ao selecionar um item, a verificação seria assim:

 

Imagina que tenho X itens no listview, desses itens tem 2 que o valor é igual a 1 e outro igual a 7, preciso da seguinte regra:

 

Se existir na lista o item 1 e o 7 forçar que seja primeiro selecionado o item 1 entendeu? se na lista existir somente o item com valor 7 passar normalmente.

 

Hoje eu tenho o seguinte código, ele verifica itens com multi aprovações, precisaria colocar nesse código a validação. Obrigado!

 

Private Sub ProcessarOperacaoPendente(ByVal Index As Integer)

   Dim strOperacoes  As String
   Dim objListItem   As MSComctlLib.ListItem
   Dim blnFlag       As Boolean
   Dim strFragLSO    As String
   Dim lngIdUsuario  As Long
   Dim lngIDOperacao As Long

   'Captura as operações pendentes e verifica se existe na multi seleção mais de um reset de senha e
   'inclusão de usuário selecionados; só é possível multi-aprovação / rejeição nos demais casos, pois
   'a inclusão de usuário e o reset de senha implicam em exibir um form com o segundo fragmento da senha,
   'o que torna muito ruim a visualização, caso o administrador resolva autorizar 4 resets de senha,
   'por exemplo.
   For Each objListItem In ltwOperacoesPendentes.ListItems

       If objListItem.Checked Then

           If blnFlag Then
               MsgBox "Multi Aprovação com operações de Reset de Senha e Inclusão de Usuário não são permitidas!", vbExclamation, Me.Caption
               Exit Sub
           End If

           'Na coluna 7, está o id_operacao, que indica qual operação
           '(1 = cadastro de usuários e 7 = reset de senha)
           'Na coluna 8, reside o tipo de operação.
           If Index = 0 Then

               If (objListItem.SubItems(7) = 1 And objListItem.SubItems(8) = "I") Or _
                   objListItem.SubItems(7) = 7 Then

                   'Primeiro obtém a nova senha do usuário.
                   strFragLSO = objListItem.SubItems(9)
                   lngIDOperacao = objListItem.SubItems(7)
                   lngIdUsuario = CapturarIDUsuarioOperacaoPendente(objListItem.SubItems(7), Right(objListItem.Key, Len(objListItem.Key) - 1))
                   blnFlag = True

               End If

           End If

           strOperacoes = strOperacoes + IIf(strOperacoes = "", "", ",") + Right(objListItem.Key, Len(objListItem.Key) - 1)

       End If

   Next

   If strOperacoes <> "" Then

       'Se houver ao menos uma operação pendente selecionada ....
       Load frmAutenticacao
       With frmAutenticacao
           If Index = 0 Then
               .OperacaoCorrente = APROVAR
           Else
               .OperacaoCorrente = REJEITAR
           End If
           .idOperacaoPendente = strOperacoes
           .FragSenhaLSO = strFragLSO
           .idUsuarioAprovado = lngIdUsuario
           .idOperacao = lngIDOperacao
           .Show vbModal
       End With

       Unload frmAutenticacao

       Call AtualizarLista

   Else

       MsgBox "Selecione ao menos uma operação pendente!", vbExclamation, Me.Caption

   End If

End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo, não trabalho muito com listview mas vamos la.

 

Eu creio que assim como uma listbox, a listview tem(se não tem um campo próprio) para armazenar um valor de qualquer tipo, por exemplo, um código de cliente que deverá ficar oculto e quando este for acionado eis que então o programa busca o valor armazenado.

 

você poderia adicionar este valor na validação, como não tenho o nome exato agora vou te deixar apenas com um pseudoalgoritmo aqui e alguns sites de referencia, espero que ajude.

 

ai vai:

 

Você poderia utilizar estes campos de armazenamento de dados ocultos(se eu não me engano é a propriedade BindingContext) para armazenar os valores dessas propriedades, e então, você poderia definir uma rotina para o evento de clique sobre um subitem, como o selectedIndexChanged, para que ele busque o valor deste BindingContext e verifique se é 1 ou 7, e outro para quando os valores fossem adicionados assim você poderia verificar logo de inicio como você que fazer esta verificação.

 

Irei averiguar os nomes melhor e dar mais uma pesquisada com uns contatos, mas por enquanto o "algoritmo" é o que eu posso oferecer hehehe espero que isso te ajude.

 

Aqui vai alguns sites de referencia:

 

http://msdn.microsoft.com/pt-br/library/system.windows.forms.listbox.aspx

 

Classe Binding Context

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal muito obrigado mesmo pelas informações e atenção!!! De verdade mesmo!!! eu consegui da seguinte forma:

 

Criei um contador e fiz uma verificação no itens da lista, ficou assim:

For Each objListItem In ltwOperacoesPendentes.ListItems


               'Validação para resetar senha antes do cadastro
               intB = intB + 1

               If objListItem.Checked Then

                 If objListItem.SubItems(7) = 1 Then
                      intA = 1
                      If intB <> 1 And intB <> 0 And intA = 1 Then
                           MsgBox "Esta transação deve ser aprovada após a transação de reset de senha.", vbExclamation, Me.Caption
                           Exit Sub
                       End If
                  End If

               If blnFlag Then
                   MsgBox "Multi Aprovação com operações de Reset de Senha e Inclusão de Usuário não são permitidas!", vbExclamation, Me.Caption
                   Exit Sub
               End If

               'Na coluna 7, está o id_operacao, que indica qual operação
               '(1 = cadastro de usuários e 7 = reset de senha)
               'Na coluna 8, reside o tipo de operação.
               If Index = 0 Then

                   If (objListItem.SubItems(7) = 1 And objListItem.SubItems(8) = "I") Or _
                       objListItem.SubItems(7) = 7 Then

                       'Primeiro obtém a nova senha do usuário.
                       strFragLSO = objListItem.SubItems(9)
                       lngIDOperacao = objListItem.SubItems(7)
                       lngIdUsuario = CapturarIDUsuarioOperacaoPendente(objListItem.SubItems(7), Right(objListItem.Key, Len(objListItem.Key) - 1))
                       blnFlag = True

                   End If

               End If

            strOperacoes = strOperacoes + IIf(strOperacoes = "", "", ",") + Right(objListItem.Key, Len(objListItem.Key) - 1)

           End If

       Next

Se alguém passar por esta mesma situação estou a disposição para ajudar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.