ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Colunas da tabela preenchendo combobox[Resolvido]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
clsbuzios
Novato
Novato


Registrado: Quarta-Feira, 17 de Abril de 2013
Mensagens: 31

MensagemEnviada: Sex Jun 07, 2013 8:09 pm    Assunto: Colunas da tabela preenchendo combobox[Resolvido] Responder com Citação

Em um form tenho um combobox(cbxField) que é usado para fazer pesquisas nos campos de uma tabela, um DataSource(DS) ligado a um ClientDataSet, no OnCreate do form eu preencho a combobox e ela me fornece todos os Fields que são String no ClienteDataSet:


Código:

procedure Tfrm_Modelo.FormCreate(Sender: TObject);
var
I, J: Integer;
hwndHandle : THANDLE;
hMenuHandle : HMenu;
begin
  for I := 0 to Pred(DS.Dataset.FieldCount) do
    begin
      if DS.DataSet.Fields[I].DataType in [ftString] then
      begin
      J := cbxField.Items.Add(DS.DataSet.Fields[I].DisplayLabel);
      SetLength(ListaField,High(ListaField)+2);
      ListaField[J] := I;
      end;
    end;
begin
    hwndHandle := Self.Handle;
    if (hwndHandle <> 0) then
      begin
          hMenuHandle := GetSystemMenu(hwndHandle, FALSE);
          if (hMenuHandle <> 0) then
          DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
      end;
end;


Eu uso esse código porque ele me retorna o DisplayLabel ao invés do FieldName e fica mais bonito "Endereço" do que "ENDERECO", e funciona perfeitamente, porém eu queria selecionar os Fields que vão aparecer ao invés de aparecerem todos.

Digamos que a combobox ficou com 3 campos, porque haviam 3 Fields do tipo string:
1º campo é 'Nome'
2º campo é 'Endereço'
3º campo é 'Cidade'

Mas eu só quero que apareçam o 1º e o 3º no combobox ao invés de todos.

Alguém ai tem uma solução pra isso?


Editado pela última vez por clsbuzios em Sáb Jun 08, 2013 4:28 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosbaixista
Profissional
Profissional


Registrado: Quinta-Feira, 18 de Março de 2010
Mensagens: 594
Localização: Maringá/PR

MensagemEnviada: Sex Jun 07, 2013 8:45 pm    Assunto: Re: Colunas da tabela preenchendo combobox Responder com Citação

clsbuzios escreveu:
Em um form tenho um combobox(cbxField) que é usado para fazer pesquisas nos campos de uma tabela, um DataSource(DS) ligado a um ClientDataSet, no OnCreate do form eu preencho a combobox e ela me fornece todos os Fields que são String no ClienteDataSet:


Código:

procedure Tfrm_Modelo.FormCreate(Sender: TObject);
var
I, J: Integer;
hwndHandle : THANDLE;
hMenuHandle : HMenu;
begin
  for I := 0 to Pred(DS.Dataset.FieldCount) do
    begin
      if DS.DataSet.Fields[I].DataType in [ftString] then
      begin
      J := cbxField.Items.Add(DS.DataSet.Fields[I].DisplayLabel);
      SetLength(ListaField,High(ListaField)+2);
      ListaField[J] := I;
      end;
    end;
begin
    hwndHandle := Self.Handle;
    if (hwndHandle <> 0) then
      begin
          hMenuHandle := GetSystemMenu(hwndHandle, FALSE);
          if (hMenuHandle <> 0) then
          DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
      end;
end;


Eu uso esse código porque ele me retorna o DisplayLabel ao invés do FieldName e fica mais bonito "Endereço" do que "ENDERECO", e funciona perfeitamente, porém eu queria selecionar os Fields que vão aparecer ao invés de aparecerem todos.

Digamos que a combobox ficou com 3 campos, porque haviam 3 Fields do tipo string:
1º campo é 'Nome'
2º campo é 'Endereço'
3º campo é 'Cidade'

Mas eu só quero que apareçam o 1º e o 3º no combobox ao invés de todos.

Alguém ai tem uma solução pra isso?



Olá amigo.

Você pode fazer isso de duas maneiras:
- Colocar um campo no banco de dados onde você marcaria o que mostrar e o que não mostrar.
- Fazer um IF verificando se é o que deseja mostrar.

As duas maneiras se vai ter que usar IF.

Mais ou menos assim.

Código:
IF campo = cidade then
             Mostre o campo;


O caminho é esse ai.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
clsbuzios
Novato
Novato


Registrado: Quarta-Feira, 17 de Abril de 2013
Mensagens: 31

MensagemEnviada: Sex Jun 07, 2013 11:02 pm    Assunto: Responder com Citação

Olá marcosbaixista,

Muito obrigado pela atenção amigo, mas acho que voce não entendeu o que estou querendo fazer, o campo que eu selecionar nessa combobox vai servir de parâmetro pra pesquisa em um DBGrid.

Eu não posso ter 1 campo na combobox, mesmo porque a tabela tem mais de 1 coluna do tipo string, o código que eu tenho me trás todas as colunas string da tabela, mas eu só quero algumas.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosbaixista
Profissional
Profissional


Registrado: Quinta-Feira, 18 de Março de 2010
Mensagens: 594
Localização: Maringá/PR

MensagemEnviada: Sáb Jun 08, 2013 12:43 am    Assunto: Responder com Citação

clsbuzios escreveu:
Olá marcosbaixista,

Muito obrigado pela atenção amigo, mas acho que voce não entendeu o que estou querendo fazer, o campo que eu selecionar nessa combobox vai servir de parâmetro pra pesquisa em um DBGrid.

Eu não posso ter 1 campo na combobox, mesmo porque a tabela tem mais de 1 coluna do tipo string, o código que eu tenho me trás todas as colunas string da tabela, mas eu só quero algumas.


Olá, pelo que entendi você quer mostrar as colunas do Grid no ComboBox é isso?

Tenta assim:

Código:

IF DBGrid.Colunns = Coluna que quero mostrar then
   Combobox.Itens:= DBGrid.Colunns;


É mais ou menos por ai.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
clsbuzios
Novato
Novato


Registrado: Quarta-Feira, 17 de Abril de 2013
Mensagens: 31

MensagemEnviada: Sáb Jun 08, 2013 1:02 am    Assunto: Responder com Citação

Boa Noite Marcos!

Ainda não é isso meu querido, veja bem, eu seleciono um campo no combobox, e na medida que vou digitando, em um edit uma palavra o sistema vai filtrando os registros do grid na coluna igual ao campo que eu selecionei no combobox. Eu não preciso pegar nenhuma coluna do grid para popular a combobox, entendeu? Meu código já faz isso.
Só que o código popula o combobox com todas as colunas eu não preciso de todas.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Sáb Jun 08, 2013 2:13 am    Assunto: Responder com Citação

clsbuzios, uma ideia é usar a propriedade Tag do campo.
Por exemplo, você seta o 1º e 3º campo como Tag = 1, e então, no seu código você seleciona somente os campos que tiverem Tag = 1 para aparecem no ComboBox. Mais ou menos assim:
Código:
if (DS.DataSet.Fields[I].DataType in [ftString]) and (DS.DataSet.Fields[I].Tag = 1) then

Claro, não é a melhor prática, mas é um "workaround", rsrs.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
clsbuzios
Novato
Novato


Registrado: Quarta-Feira, 17 de Abril de 2013
Mensagens: 31

MensagemEnviada: Sáb Jun 08, 2013 4:26 pm    Assunto: Responder com Citação

Mestre Batera,

A solução que você me passou não é um "workaround", o certo é "The workaround"! hahahahahahahahhhhaha

Funcionou perfeitamente, muito obrigado Mestre!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB