BrowseDialog - SearchFields - Error


Author
Message
Rogerio Mauri
Rogerio Mauri
StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)
Group: StrataFrame Users
Posts: 205, Visits: 629
Ivan... Boa Tarde...

Necessitarei da sua ajuda aqui, com seu bom inglês.

Observe as imagens do arquivo anexado. Um campo com um Combo BO anexado para pegar apenas os clubes habilitados para o usuário logado carrega os registros na interface de pesquisa (apaguei os dados do TopMost Text/Value para evitar que o filtro desconsidere esse campo na filtragem). No entanto o resultado da pesquisa exibe registros de outros clubes também.

ImagemConfA.jpg = Mostra o BO com Fill personalizado para trazer apenas os clubes habilitados para o usuário logado.

ImagemConfB.jpg = Onde apaguei os valores de TopMost (quero forçar a seleção).

ImagemConfC.jpg = A tela 'General' do campo IdClube configurada.

ImagemConfD.jpg = Todos os campos configurados para a pesquisa.

ImagemA.jpg = Observe que no combo exibe apenas um clube. No resultado da pesquisa, que está ordenado pelo primeiro campo, a coluna IDClube confirma que os registros do clube 1 foram listados.

ImagemB.jpg = Nesta imagem, observe que, no final, estão também os registros de outro clube (IDClube = 2) demonstrando que o módulo não filtrou corretamente os registros.

Aguardo seu retorno.

Rogério Mauri Smile



Attachments
ImagemA.jpg (130 views, 67.00 KB)
ImagemB.jpg (124 views, 62.00 KB)
ImagemConfA.jpg (149 views, 83.00 KB)
ImagemConfB.jpg (123 views, 84.00 KB)
ImagemConfC.jpg (128 views, 83.00 KB)
ImagemConfD.jpg (123 views, 59.00 KB)
Ivan George Borges
Ivan George Borges
Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)
Group: StrataFrame MVPs
Posts: 1.9K, Visits: 21K
No seu Combo Population Settings tem uma propriedade chamada "Value Member". Você setou esta propriedade com a PrimaryKey da sua tabela de clubes?
Rogerio Mauri
Rogerio Mauri
StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)
Group: StrataFrame Users
Posts: 205, Visits: 629
Sim...

Mas, se eu voltar as opções "Top Most Text / Top Most Value" da aba "Combo - General" para os valores padrões (<Todos> e -1) a filtragem funciona corretamente:


- Escolhendo: <Todos> -> Lista os registros de todos os clubes
- Escolhendo: Náutico... -> Lista apenas os registros desse clube.

Um detalhe. Se o usuário logado é um que está habilitado em todos os clubes então, mesmo com "Top Most Text / Top Most Value" limpos a filtragem funciona. Aparentemente só não funciona quando há uma única opção listada no combobox.

Segue imagem da configuração do "Combo Population Settings".

Rogério Mauri Smile



Attachments
Imagem.jpg (110 views, 40.00 KB)
Rogerio Mauri
Rogerio Mauri
StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)
Group: StrataFrame Users
Posts: 205, Visits: 629
Ivan... Acho que encontrei o problema no componente BigGrin.

Analise o segmento de código abaixo que está na classe "BrowseDialogWindow", função "HasData". Observe que estando o .SelectedIndex = 0 (é o caso quando existe apenas um registro no combobox), o SelectedValue correspondente não será retornado para _CurrentValue porque llResult será 'false' (ele testa > 0). Resultado, na cláusula Where essa condição não será adicionada como parte integrante do filtro.

Inclusive, observe no código que há um marcador de comentário logo acima, fazendo comparação com .SelectedIndex <> -1. Mudaram depois e deve haver algum motivo para isso (deve ter relação com o TopMost como default); só que acabou provocando outro erro de lógica.

            '-- Determine the type of control
            If CurrentControl.GetType() Is GetType(MicroFour.StrataFrame.UI.Windows.Forms.MaskedTextbox) Then
                With CType(CurrentControl, MicroFour.StrataFrame.UI.Windows.Forms.MaskedTextbox)
                    llReturn = .Text.Trim().Length > 0

                    If llReturn Then
                        _CurrentValue = .Text
                    End If
                End With
            ElseIf CurrentControl.GetType() Is GetType(MicroFour.StrataFrame.UI.Windows.Forms.ComboBox) Then
                With CType(CurrentControl, MicroFour.StrataFrame.UI.Windows.Forms.ComboBox)
                    'llReturn = CType(.SelectedValue, Integer) <> -1
                    llReturn = .SelectedIndex > 0

                    If llReturn Then
                        _CurrentValue = .SelectedValue
                    End If
                End With
            Else
                With CType(CurrentControl, MicroFour.StrataFrame.UI.Windows.Forms.DateTimePicker)
                    llReturn = .Checked

                    If llReturn Then
                        _CurrentValue = .Value
                    End If
                End With
            End If

 

 

Rogério Mauri Smile



Ivan George Borges
Ivan George Borges
Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)
Group: StrataFrame MVPs
Posts: 1.9K, Visits: 21K
OK. Provavelmente um valor seja esperado para TopMost. Setando um com valor -1 e texto "(não especificado)" não resolveria o seu problema?
Rogerio Mauri
Rogerio Mauri
StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)
Group: StrataFrame Users
Posts: 205, Visits: 629
Não... Porque na verdade ele desconsidera o conteúdo do índice 0 (veja que ele não trata o conteúdo com Index = 0 e TopMost será sempre índice 0). Concluindo, utilizando ou não TopMost o resultado será sempre o mesmo. Já fiz o teste. Permanecendo como está, temos um 'bug' no diálogo de pesquisa.

Rogério Mauri Smile

Ivan George Borges
Ivan George Borges
Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)
Group: StrataFrame MVPs
Posts: 1.9K, Visits: 21K
Bom Rogério, este BrowseDialog está em uso com todo o pessoal que usa SF, ele deve estar funcionando de alguma maneira. Se você coloca um TopMost com o texto "Não Utilizado", é exatamente isto que irá acontecer, este critério de busca não será utilizado se o usuário escolher a opção "Não Utilizado".

É a mesma situação de um Textbox, se deixá-lo em branco, não será considerado para busca. A única maneira de se permitir um usuário não escolher nenhum item de um ComboBox para a sua busca, é fornecendo um valor de TopMost com um texto "Não Utilizado", senão você estaria obrigando o usuário a sempre utilizar um valor do ComboBox para a sua busca, o que pode inutilizar a utilização de um Combobox em Browse Dialogs.

Se você porém utilizar qualquer outro item do seu ComboBox, o index será diferente de zero, e o Value Member será utilizado para a busca no banco de dados. Logo, se você utilizar o TopMost da maneira que eu te descrevi, seu BrowseDialog certamente funcionará. 

Rogerio Mauri
Rogerio Mauri
StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)
Group: StrataFrame Users
Posts: 205, Visits: 629
Ivan... Mas é essa a intenção, obrigar o usuário a escolher uma opção de filtro, excluindo a opção "Não utilizar". Seria o mesmo que forçar o usuário a fornecer um texto de filtro em um cambo TextBox (ou seja, ele não poderia ser vazio); recurso que também não existe no BrowseDialog.

Rogério Mauri Smile

Rogerio Mauri
Rogerio Mauri
StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)
Group: StrataFrame Users
Posts: 205, Visits: 629
Um detalhe...

Concordo que se eu utilizar a opção "TopMost" o BrowseDialog irá tratá-la como tal. Mas a questão é que, no exemplo, limpei essa opção (ela não existe no combobox em tempo de execução). Portanto, se não existe, o SelectedIndex = 0 é um item válido do BO utilizado para popular o controle e o seu SelectedValue precisa ser considerado no filtro. Caso contrário, não faria sentido configurar ou não o TopMost.

Rogério Mauri Smile



Ivan George Borges
Ivan George Borges
Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)
Group: StrataFrame MVPs
Posts: 1.9K, Visits: 21K
Eu sei, entendi isto no início. Por isto que te falei que você deveria tentar usando o TopMost, pois ele me parece ser a única solução no momento tanto para o Combobox, já que é necessário haver um index que não vai gerar critério de busca.

Se você quer permitir busca em apenas alguns clubes, a estratégia provavelmente terá que ser diferente, utilizando os eventos do Browse Dialog, como o Searching, onde você pode manipular a busca a ser executada praticamente de qualquer maneira.

GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Similar Topics

Reading This Topic

Login

Explore
Messages
Mentions
Search