DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
Marcos Vinicius Rossetto
 

País: Brasil
Estado: RS
Cidade: Guaporé
Mensagens: 27
 Postado em: 26/6/2012 9:00:04 AM

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
Bretas
 
 


País: Brasil
Estado: MT
Cidade: Cuiabá
Mensagens: 226
 Postado em: 26/6/2012 10:21:43 AM
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:

#Código

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

 
Natanael Costa Ferreira
 

País: Brasil
Estado: MG
Cidade: Belo Horizonte
Mensagens: 18
 Postado em: 26/6/2012 10:23:57 AM

Citação:
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.



 
Marcos Vinicius Rossetto
 

País: Brasil
Estado: RS
Cidade: Guaporé
Mensagens: 27
 Postado em: 26/6/2012 10:45:44 AM
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.

 
Bretas
 
 


País: Brasil
Estado: MT
Cidade: Cuiabá
Mensagens: 226
 Postado em: 26/6/2012 11:19:48 AM
Marcos tenta esse código:

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

 
Natanael Costa Ferreira
 

País: Brasil
Estado: MG
Cidade: Belo Horizonte
Mensagens: 18
 Postado em: 26/6/2012 12:52:38 PM

Citação:
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:

#Código

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

 
Marcos Vinicius Rossetto
 

País: Brasil
Estado: RS
Cidade: Guaporé
Mensagens: 27
 Postado em: 27/6/2012 8:09:17 AM
Galera vlw pela ajuda , funciono como eu queria

abraço..


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

 
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03