Fórum Seleção Dbgrid #418941
26/06/2012
0
cada cliente tem seus itens no DBgrid, preciso que eu consiga fazer a seleção de alguns itens para
efetuar um pagamento parcial da conta...
Se alguem poder me ajudar agradeço desde já..
Marcos V. Rossetto
marcos@abacus.inf.br
Marcos Rossetto
Curtir tópico
+ 0Posts
26/06/2012
Gustavo Bretas
Selecione a Grid, vai pro Object Inspector, procure pela propriedade Options, habilite as propriedade:
dbRowSelect = True
dgMultiSelect = True
Para utilizar as linhas selecionadas, vc pode executar o seguinte comando:
// Declare a variável i: Integer; for i := 0 to SeuDBGrid.SelectedRows.Count - 1 do begin SeuDataSet.Bookmark := SeuDBGrid.SelectedRows.Items[i]; ShowMessage(SeuDataSet.FieldByName(CAMPO).AsString); end;
Gostei + 0
26/06/2012
Natanael Ferreira
cada cliente tem seus itens no DBgrid, preciso que eu consiga fazer a seleção de alguns itens para
efetuar um pagamento parcial da conta...
Se alguem poder me ajudar agradeço desde já..
Marcos V. Rossetto
marcos@abacus.inf.br
Bom dia Marcos,
Para selecionar mais de um item no DBGrid:
- Na propriedade OPTIONS do DBGrid selecione a opção MULTISELECT.
Com isso você consegue selecionar mais de 1 opção no Grid.
Para somar os valores dos campos selecionados, tem uma dica neste link:
http://www.planetadelphi.com.br/dica/2660/multiselect-do-dbgrid
É esta aqui:
Gerenciando mais de uma linha selecionada num DBGrid (Multiselect)
O DBGrid tem uma propriedade não documentada chamada SelectedRows
(Tbookmark). Com ela você pode gerenciar Multiselect da seguinte forma:
var
contador: Integer;
begin
With Dbgrid1 do
Begin
for contador:= 0 to Pred(SelectedRows.Count) do
Begin
Datasource.Dataset.Bookmark:= SelectedRows[contador]; // posiciona nos registros selecionados do DBGrid
end;
end;
Você pode adaptar este codigo as suas necessidades.
Gostei + 0
26/06/2012
Marcos Rossetto
procedure TFrmPrincipal.Button1Click(Sender: TObject);
var
i: Integer;
sum : Single;
begin
if DBGridDetalheCon.SelectedRows.Count > 0 then
begin
sum := 0;
with DBGridDetalheCon.DataSource.DataSet do
begin
for i := 0 to (DBGridDetalheCon.SelectedRows.Count-1) do
begin
GotoBookmark(Pointer(DBGridDetalheCon.SelectedRows.IndexOf(DESRICAO)));
sum:= sum + IBQuery1.FieldByName(VALORTOTAL).AsFloat;
end;
end;
EdtValorParcial.Text := FloatToStr(sum);
end
end;
mas ele nao esta pegando os valores de cada itens, apenas o do primeiro item e fazendo a soma.
Gostei + 0
26/06/2012
Gustavo Bretas
procedure TFrmPrincipal.Button1Click(Sender: TObject);
var
vlcSum : Currency;
i: Integer;
begin
vlcSum := 0;
for i := 0 to DBGridDetalheCon.SelectedRows.Count - 1 do
begin
IBQuery1.Bookmark := DBGridDetalheCon.SelectedRows.Items[i];
vlcSum := vlcSum + IBQuery1.FieldByName(VALORTOTAL).AsFloat;
end;
EdtValorParcial.Text := FormatCurr(###,##0.00, vlcSum)
end;
Eu não coloquei o IF SelectedRows.Count > 0 por que quando for 0, ele não vai entrar no looping!
Espero ter ajudado!
Gostei + 0
26/06/2012
Natanael Ferreira
procedure TFrmPrincipal.Button1Click(Sender: TObject);
var
i: Integer;
sum : Single;
begin
if DBGridDetalheCon.SelectedRows.Count > 0 then
begin
sum := 0;
with DBGridDetalheCon.DataSource.DataSet do
begin
for i := 0 to (DBGridDetalheCon.SelectedRows.Count-1) do
begin
GotoBookmark(Pointer(DBGridDetalheCon.SelectedRows.IndexOf(DESRICAO)));
sum:= sum + IBQuery1.FieldByName(VALORTOTAL).AsFloat;
end;
end;
EdtValorParcial.Text := FloatToStr(sum);
end
end;
mas ele nao esta pegando os valores de cada itens, apenas o do primeiro item e fazendo a soma.
Marcos,
Testei o código abaixo e funcionou perfeitamente aqui:
var i: Integer; aux: double; begin for i := 0 to DBGrid1.SelectedRows.Count - 1 do begin DataSource1.DataSet.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i])); aux := aux + IBQuery1.FieldByName(TOTGUIA).Value; end; EdtValorParcial.Text := FloatToStr(aux);
Testa aí...
Espero ter ajudado
Gostei + 0
27/06/2012
Marcos Rossetto
abraço..
Marcos V. Rossetto
marcos@abacus.inf.br
www.showdelphi.com.br
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)