Duvida com DbGrid
Bom dia amigos, tenho uma duviva:
Eu tenho em meu programa um ClientDataSet con todas as cidades de brasil. Entre os campos do ClienteDataSet eu tenho a que estado essa cidade pertence.
Tenho tambem um dbgrid conectado com esse ClientDataSet de Cidades, sera que eu posso filtrar as cidades que vao aparecer no dbgrid pelo campo estado?? que so apareçam as cidades de un determinado estado.
Desde ja agradeço sua ajuda.
Eu tenho em meu programa um ClientDataSet con todas as cidades de brasil. Entre os campos do ClienteDataSet eu tenho a que estado essa cidade pertence.
Tenho tambem um dbgrid conectado com esse ClientDataSet de Cidades, sera que eu posso filtrar as cidades que vao aparecer no dbgrid pelo campo estado?? que so apareçam as cidades de un determinado estado.
Desde ja agradeço sua ajuda.
Eduardocar83
Curtidas 0
Respostas
Marco Salles
28/07/2008
pode ser feito assim
ou assim
ou assim
nos Tres casos é casesensitive .... se quiser Desconsiderar Maiscula de Minuscula tem que usar o evento FilterRecord e fazer codificação
extra ... Com a propriedade fielter , não me recordo de ter esta
possibilidade ...
cds.close; cds.Filter:=´EstadO like ´+QuotedStr(´¬´+edit1.text); cds.Filtered:=true; cds.Open; showmessage(cds.Filter);
ou assim
cds.close; cds.Filter:=´EstadO = ´+QuotedStr(edit1.text); cds.Filtered:=true; cds.Open; showmessage(cds.Filter);
ou assim
cds.close; cds.Filter:=´EstadO like ´+QuotedStr(´¬´+AnsiUpperCase(edit1.text)); cds.Filtered:=true; cds.Open; showmessage(cds.Filter);
nos Tres casos é casesensitive .... se quiser Desconsiderar Maiscula de Minuscula tem que usar o evento FilterRecord e fazer codificação
extra ... Com a propriedade fielter , não me recordo de ter esta
possibilidade ...
GOSTEI 0
Eduardocar83
28/07/2008
Obrigado Marco Salles, mas fazendo desse jeito abrindo e fechando o ClientDataSet, ele vai trazer os dados denovo do servidor ne?? porque meu ClientDataSet esta conectado com um DataSetProvider e SqlDataSet.
Sera que tenho que utilizar um ClientDataSet adicional para filtrar os dados, e desse jeito naum ter que trazer os dados denovo do server??
Vc saberia me disser como se conectan dois ClientDataSet, pra um filtrar os dados do outro??? muitao obrigado, amigo.
Sera que tenho que utilizar um ClientDataSet adicional para filtrar os dados, e desse jeito naum ter que trazer os dados denovo do server??
Vc saberia me disser como se conectan dois ClientDataSet, pra um filtrar os dados do outro??? muitao obrigado, amigo.
GOSTEI 0
Marco Salles
28/07/2008
Obrigado Marco Salles, mas fazendo desse jeito abrindo e fechando o ClientDataSet, ele vai trazer os dados denovo do servidor ne?? porque meu ClientDataSet esta conectado com um DataSetProvider e SqlDataSet.
Sera que tenho que utilizar um ClientDataSet adicional para filtrar os dados, e desse jeito naum ter que trazer os dados denovo do server??
Vc saberia me disser como se conectan dois ClientDataSet, pra um filtrar os dados do outro??? muitao obrigado, amigo.
sim , tem o [b:55d4caba8f]clonecursor[/b:55d4caba8f] ...
Assim
clonecds.CloneCursor(SeuClientDataset,true);
Ligue um DataSource e um DataSet a Este cloneCds;
e faça :
clonecds.close; clonecds.Filter:=´Estado like ´+QuotedStr(AnsiUpperCase(edit1.text)+´¬´); clonecds.Filtered:=true; clonecds.open;
p:s
Veja a diferença , fundamental neste caso
clonecds.CloneCursor(SeuClientDataset,true); showmessage(clonecds.ProviderName); e clonecds.CloneCursor(SeuClientDataset,false); showmessage(clonecds.ProviderName);
portanto o segundo parametro deve ser true neste caso ...
GOSTEI 0
Eduardocar83
28/07/2008
Ola Marco Salles, o que me preocupava e que no primeiro codigo que vc postou tinha cdsCidades.close e cdsCidades.Open.
Dae eu acho que ele atualiza os dados desde o servidor o qual eu nao quero (tenho cdsCidades+dspCidades+sqlConection).
Depois pesquisando um pouco mais, vi que nao e necessario fechar e abrir o cdsCidades para filtrar, e so colocar a propriedade cdsCidades.filtered := True. Assim ele limita a visibilidade dos registros de acordo com o cdsCidades.filter := ´ xxxxxx ´;
Valeu amigo, tem me ajudado muito suas dicas. Obrigado.
Dae eu acho que ele atualiza os dados desde o servidor o qual eu nao quero (tenho cdsCidades+dspCidades+sqlConection).
Depois pesquisando um pouco mais, vi que nao e necessario fechar e abrir o cdsCidades para filtrar, e so colocar a propriedade cdsCidades.filtered := True. Assim ele limita a visibilidade dos registros de acordo com o cdsCidades.filter := ´ xxxxxx ´;
Valeu amigo, tem me ajudado muito suas dicas. Obrigado.
GOSTEI 0
Eduardocar83
28/07/2008
aqui va um link muito bom, onde se fala do ClientDataSet http://www.comunidade-firebird.org/cflp/downloads/CFLP_T002.PDF
GOSTEI 0
Marco Salles
28/07/2008
Ola Marco Salles, o que me preocupava e que no primeiro codigo que vc postou tinha cdsCidades.close e cdsCidades.Open.
Dae eu acho que ele atualiza os dados desde o servidor o qual eu nao quero (tenho cdsCidades+dspCidades+sqlConection).
Depois pesquisando um pouco mais, vi que nao e necessario fechar e abrir o cdsCidades para filtrar, e so colocar a propriedade cdsCidades.filtered := True. Assim ele limita a visibilidade dos registros de acordo com o cdsCidades.filter := ´ xxxxxx ´;
amigo , tem mais coisas entre o ceu e a terra e etc...
eu não abri e fechei o cds para ele simplesmente filtrar não
eu abri e fechei o cds para mudar em rum time [b:210a2976ae]o valor do filtro ...[/b:210a2976ae]coisa que voce não consegue faze-lo com ele aberto ....
Agora se voce quiser em designer , pode colocar um filtro (FIXO) lá e depois é so habilitar a propriedade Fieltered
Se eu soubesse que voce queria so isso .....
GOSTEI 0
Marco Salles
28/07/2008
eu não abri e fechei o cds para ele simplesmente filtrar não
eu abri e fechei o cds para mudar em rum time o valor do filtro ...coisa que voce não consegue faze-lo com ele aberto ....
Errata ... fiz ums teste aqui e veifiquei que para mudar o valor do Filtro em Rum Time , basta fazer cds.Filtered:=false; e alterar
cds.Filtered:=false; cds.Filter:=edit1.text+´ Like´+QuotedStr(edit2.Text+´¬´); cds.Filtered:=true;
p:s .. Edit1.text é o Nome do campo ... Assim voce pode criar vários
filtros em Rum Time
Eu não sei se o codigo inicial aonde tinha o close e o open foi um codigo
meu do mybase que eu peguei etc... Mas sua obeservação foi persistente e muito bem colocada ...
GOSTEI 0