Difícil, gt;gt;gt; filtrar considerando escolhas anterior
Galera, fiz um DBGrid onde tem um ComboBox (estou usando IBDataSet do IBX) eu queria implementar meu programa fazendo com que nessa combobox não aparecesse os itens já escolhidos nas linhas superiores do grid.
Alguém sabe como fazer isso?
Obrigadão!!!! :lol:
Alguém sabe como fazer isso?
Obrigadão!!!! :lol:
Alex_
Curtidas 0
Respostas
Schwarze
02/05/2003
Seguinte:
Se você simplesmente está tentando selecionar um texto de um combo com textos fixos, a solução abaixo é adequada:
Você deve adicionar as colunas ao dbgrid (chamando o editor com um duplo clique no grid), ao invés de utilizar diretamente os campos da tabela. Cada coluna tem a propriedade PickList, que gera uma lista de valores que aparecem num combo.
Você deve alterar esse picklist em tempo de execução, mostrando apenas o que o usuário pode selecionar.
Se você está tentando fazer isso com um campo lookup, com o DBGrid do delphi é impossível. Mas a melhor saída talvez fosse você abandonar a idéia do combo e criar um botão elipse (...), chamando um pequeno dialog para escolher o valor.
Você pode também utilizar a biblioteca InfoPower, cujo grid é imensamente mais flexível que o DBGrid padrão da VCL.
8) Ajudei?
Se você simplesmente está tentando selecionar um texto de um combo com textos fixos, a solução abaixo é adequada:
Você deve adicionar as colunas ao dbgrid (chamando o editor com um duplo clique no grid), ao invés de utilizar diretamente os campos da tabela. Cada coluna tem a propriedade PickList, que gera uma lista de valores que aparecem num combo.
Você deve alterar esse picklist em tempo de execução, mostrando apenas o que o usuário pode selecionar.
Se você está tentando fazer isso com um campo lookup, com o DBGrid do delphi é impossível. Mas a melhor saída talvez fosse você abandonar a idéia do combo e criar um botão elipse (...), chamando um pequeno dialog para escolher o valor.
Você pode também utilizar a biblioteca InfoPower, cujo grid é imensamente mais flexível que o DBGrid padrão da VCL.
8) Ajudei?
GOSTEI 0
Alex_
02/05/2003
Respondeu, e melhor tocou no assunto que queria, Infopower.
Estou fazendo uso justamente desses componentes usei um wwDBGrid e wwLookUpComboBox. e ligei ele ao Grid.
Está funcionando legal, porém não com essa opção de filtrar o ultimo escolhido.
Não tinha falado sobre esse componente pois eu pensava que não era tão conhecido.
Se agora ficar mais fácil me ajudar, agradeço mais uma vez ainda!!!
:wink: :lol: :) :D :wink: :lol: :) :D :wink: :lol: :) :D :wink: :lol: :) :D :wink: :lol: :) :D
Estou fazendo uso justamente desses componentes usei um wwDBGrid e wwLookUpComboBox. e ligei ele ao Grid.
Está funcionando legal, porém não com essa opção de filtrar o ultimo escolhido.
Não tinha falado sobre esse componente pois eu pensava que não era tão conhecido.
Se agora ficar mais fácil me ajudar, agradeço mais uma vez ainda!!!
:wink: :lol: :) :D :wink: :lol: :) :D :wink: :lol: :) :D :wink: :lol: :) :D :wink: :lol: :) :D
GOSTEI 0
Schwarze
02/05/2003
Aí é assim:
1. Você cria um calculado, contendo o que você quer mostrar.
2. Muda o EditCalculated do grid pra True;
3. Cria um combo normal (TwwDbComboBox) e povoa ele manualmente, cada vez que o usuário mudar de registro (evento AfterScroll da sua dataset). Ou, se você não estiver usando cachedupdates, continua usando o lookup e escreve sua query de modo a não mostrar o que já foi selecionado;
4. Escreve um evento OnChange para o campo, e joga o valor do campo certo na tabela. Por exemplo:
[color=red:210637b9fc][size=9:210637b9fc]
TFormX.QueryXCampoXChange(Sender: TField)
begin
//Evitar recursão, pois o campoX vai ser recalculado no OnCalcFields
Sender.OnChange:= nil;
//Campo y é o campo com o valor do lookup
Sender.Dataset[´CampoY´]:= ComboX.Value;
//voltar o evento
Sender.OnChange:= QueryXCampoXChange;
end;[/size:210637b9fc][/color:210637b9fc]5.
:mrgreen: Agora foi?
1. Você cria um calculado, contendo o que você quer mostrar.
2. Muda o EditCalculated do grid pra True;
3. Cria um combo normal (TwwDbComboBox) e povoa ele manualmente, cada vez que o usuário mudar de registro (evento AfterScroll da sua dataset). Ou, se você não estiver usando cachedupdates, continua usando o lookup e escreve sua query de modo a não mostrar o que já foi selecionado;
4. Escreve um evento OnChange para o campo, e joga o valor do campo certo na tabela. Por exemplo:
[color=red:210637b9fc][size=9:210637b9fc]
TFormX.QueryXCampoXChange(Sender: TField)
begin
//Evitar recursão, pois o campoX vai ser recalculado no OnCalcFields
Sender.OnChange:= nil;
//Campo y é o campo com o valor do lookup
Sender.Dataset[´CampoY´]:= ComboX.Value;
//voltar o evento
Sender.OnChange:= QueryXCampoXChange;
end;[/size:210637b9fc][/color:210637b9fc]5.
:mrgreen: Agora foi?
GOSTEI 0
Alex_
02/05/2003
[b:984d8fdd94]Aeee! agora acho que vai!
Obrigado heim brother!!! [/b:984d8fdd94]8)
Obrigado heim brother!!! [/b:984d8fdd94]8)
GOSTEI 0