GARANTIR DESCONTO

Fórum Seleção Dbgrid #418941

26/06/2012

0

Galera estou fazendo um sistema de gerenciamente de retaurante,
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

Marcos Rossetto

Responder

Posts

26/06/2012

Gustavo Bretas

Marcos,

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;
Responder

Gostei + 0

26/06/2012

Natanael Ferreira

Galera estou fazendo um sistema de gerenciamente de retaurante,
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.


Responder

Gostei + 0

26/06/2012

Marcos Rossetto

estou com o meu codigo assim
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.
Responder

Gostei + 0

26/06/2012

Gustavo Bretas

Marcos tenta esse código:

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!
Responder

Gostei + 0

26/06/2012

Natanael Ferreira

estou com o meu codigo assim
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
Responder

Gostei + 0

27/06/2012

Marcos Rossetto

Galera vlw pela ajuda , funciono como eu queria

abraço..


Marcos V. Rossetto
marcos@abacus.inf.br
www.showdelphi.com.br
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar