Fórum ClienteDataSet - refinando a seleção do dbgrid #342917
21/06/2007
0
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
Curtir tópico
+ 0Posts
22/06/2007
Paullsoftware
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
22/06/2007
Martins
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
22/06/2007
Rinez
[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
22/06/2007
Rounilo
Testei todas e funcionaram.
É ótimo poder começar um aprendizado em uma linguagem podendo contar com a ajuda dos mais experientes.
SDS
Gostei + 0
22/06/2007
Paullsoftware
Gostei + 0
23/06/2007
Martins
[b:078e3518b0]paullsoftware[/b:078e3518b0], faço das suas palavras as minhas.
bons códigos.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)