 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
clsbuzios Novato

Registrado: Quarta-Feira, 17 de Abril de 2013 Mensagens: 31
|
Enviada: Sex Jun 07, 2013 8:09 pm Assunto: Colunas da tabela preenchendo combobox[Resolvido] |
|
|
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 |
|
 |
marcosbaixista Profissional

Registrado: Quinta-Feira, 18 de Março de 2010 Mensagens: 594 Localização: Maringá/PR
|
Enviada: Sex Jun 07, 2013 8:45 pm Assunto: Re: Colunas da tabela preenchendo combobox |
|
|
| 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 |
|
 |
clsbuzios Novato

Registrado: Quarta-Feira, 17 de Abril de 2013 Mensagens: 31
|
Enviada: Sex Jun 07, 2013 11:02 pm Assunto: |
|
|
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 |
|
 |
marcosbaixista Profissional

Registrado: Quinta-Feira, 18 de Março de 2010 Mensagens: 594 Localização: Maringá/PR
|
Enviada: Sáb Jun 08, 2013 12:43 am Assunto: |
|
|
| 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 |
|
 |
clsbuzios Novato

Registrado: Quarta-Feira, 17 de Abril de 2013 Mensagens: 31
|
Enviada: Sáb Jun 08, 2013 1:02 am Assunto: |
|
|
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 |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Sáb Jun 08, 2013 2:13 am Assunto: |
|
|
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 |
|
 |
clsbuzios Novato

Registrado: Quarta-Feira, 17 de Abril de 2013 Mensagens: 31
|
Enviada: Sáb Jun 08, 2013 4:26 pm Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|