ClienteDataSet - refinando a seleção do dbgrid
Senhores,
trabalho com Delphi7, SqlServer e ADO.
Criei uM ClienteDataset na qual mostro em um DBGRID todos os registros de uma tabela.
Gostaria de selecionar somente alguns registros , poder alterar dados e selecionar estes registros para uma impressão. Entretanto, não quero que as alterações sejam levadas para a tabela original, dai ter pensado no ClientDataset.
Para saber quais os registros que quero selecionar, criei um campo no dbgrid no qual coloco um X.
Como fazer uma nova seleção de forma a obter somente os campos marcados com X?
SDS
trabalho com Delphi7, SqlServer e ADO.
Criei uM ClienteDataset na qual mostro em um DBGRID todos os registros de uma tabela.
Gostaria de selecionar somente alguns registros , poder alterar dados e selecionar estes registros para uma impressão. Entretanto, não quero que as alterações sejam levadas para a tabela original, dai ter pensado no ClientDataset.
Para saber quais os registros que quero selecionar, criei um campo no dbgrid no qual coloco um X.
Como fazer uma nova seleção de forma a obter somente os campos marcados com X?
SDS
Rounilo
Curtidas 0
Respostas
Paullsoftware
21/06/2007
você pode fazer assim...
Supondo que esse campo se chame Selecionado e seja do tipo VarChar(1) então vc vai guardar nesse campo o valor S ou N então é só fazer um filtro para mostrar somente os registro onde o campo Selecionado for igual a S..
a ideia seria mais ou menos essa :lol: existem outra maneiras, mais acho que essa é a mais simples e eficiente :wink:
Supondo que esse campo se chame Selecionado e seja do tipo VarChar(1) então vc vai guardar nesse campo o valor S ou N então é só fazer um filtro para mostrar somente os registro onde o campo Selecionado for igual a S..
CDS.Filtered := False; CDS.Filter := ´SELECIONADO =´´S´´´; CDS.Filtered := True;
a ideia seria mais ou menos essa :lol: existem outra maneiras, mais acho que essa é a mais simples e eficiente :wink:
GOSTEI 0
Martins
21/06/2007
Você poderá também fazer da seguinte forma.
vc pode criar um ClientDataSet com os campos de sua Tabela, ao abrir seu grid Principal vc pode ir clicando sobre as linhas q contém os registros a serem editados, etc... e estes seriam adicionados ao ClientDataSet e vc poderia modificá-los livremente sem se preocupar pois eles não seriam salvos em sua tabela principal, sendo assim se vc excluir ou modificar algo indevidamente não tem problemas, mas está é uma solução paliativa visto q vc fala q não quer salvar as modificações q fizer no seu banco.
bons códigos.
vc pode criar um ClientDataSet com os campos de sua Tabela, ao abrir seu grid Principal vc pode ir clicando sobre as linhas q contém os registros a serem editados, etc... e estes seriam adicionados ao ClientDataSet e vc poderia modificá-los livremente sem se preocupar pois eles não seriam salvos em sua tabela principal, sendo assim se vc excluir ou modificar algo indevidamente não tem problemas, mas está é uma solução paliativa visto q vc fala q não quer salvar as modificações q fizer no seu banco.
bons códigos.
GOSTEI 0
Rinez
21/06/2007
Coloque em seu DBGRID
[b:8b91a00d3c]options.dgrowselect:=true;[/b:8b91a00d3c]
[b:8b91a00d3c]options.dgmultiselect:=true;[/b:8b91a00d3c]
Voce verá que, ao clicar com mouse em seu dbgrid1 o registro
selecionado terá um ponto no canto esquerdo, isto significa
que o registro está selecionado e se mantiver pressionada
a tecla CTRL voce podera selecionar varios registros.
Coloque um botão e faça:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i:integer;
begin
if DBGrid1.SelectedRows.Count=0 then BEGIN
Showmessage(´Campo não selecionado´);
exit;
end; // if dbgrid1
for i:=0 to dbgrid1.selectedrows.count-1 do begin
clientdataset1.GotoBookmark(pointer(dbgrid1.SelectedRows.items[i]));
showmessage(clientdataset1.fieldbyname(´seucampo´).AsString);
end;//for
end; //procedure
Com esse for voce pode selecionar todos os campos de seu ClientDataSet
Avise-nos se funcionar OK.
[b:8b91a00d3c]options.dgrowselect:=true;[/b:8b91a00d3c]
[b:8b91a00d3c]options.dgmultiselect:=true;[/b:8b91a00d3c]
Voce verá que, ao clicar com mouse em seu dbgrid1 o registro
selecionado terá um ponto no canto esquerdo, isto significa
que o registro está selecionado e se mantiver pressionada
a tecla CTRL voce podera selecionar varios registros.
Coloque um botão e faça:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i:integer;
begin
if DBGrid1.SelectedRows.Count=0 then BEGIN
Showmessage(´Campo não selecionado´);
exit;
end; // if dbgrid1
for i:=0 to dbgrid1.selectedrows.count-1 do begin
clientdataset1.GotoBookmark(pointer(dbgrid1.SelectedRows.items[i]));
showmessage(clientdataset1.fieldbyname(´seucampo´).AsString);
end;//for
end; //procedure
Com esse for voce pode selecionar todos os campos de seu ClientDataSet
Avise-nos se funcionar OK.
GOSTEI 0
Rounilo
21/06/2007
Obrigado a todos vcs.
Testei todas e funcionaram.
É ótimo poder começar um aprendizado em uma linguagem podendo contar com a ajuda dos mais experientes.
SDS
Testei todas e funcionaram.
É ótimo poder começar um aprendizado em uma linguagem podendo contar com a ajuda dos mais experientes.
SDS
GOSTEI 0
Paullsoftware
21/06/2007
Obrigado a todos vcs.
Testei todas e funcionaram.
É ótimo poder começar um aprendizado em uma linguagem podendo contar com a ajuda dos mais experientes.
SDS
sempre que precisar é só postar!!! :wink:GOSTEI 0
Martins
21/06/2007
[quote:078e3518b0=´Rounilo´]Obrigado a todos vcs.
Testei todas e funcionaram.
É ótimo poder começar um aprendizado em uma linguagem podendo contar com a ajuda dos mais experientes.
SDS
sempre que precisar é só postar!!! :wink:[/quote:078e3518b0][b:078e3518b0]paullsoftware[/b:078e3518b0], faço das suas palavras as minhas.
bons códigos.
GOSTEI 0