ClienteDataSet - refinando a seleção do dbgrid

Delphi

21/06/2007

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


Rounilo

Rounilo

Curtidas 0

Respostas

Paullsoftware

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..
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

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.


GOSTEI 0
Rinez

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.


GOSTEI 0
Rounilo

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


GOSTEI 0
Paullsoftware

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

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
POSTAR