Mudar cor da linha DBGRID
Caros
Como posso alterar (destacar) a linha de um item excluído do DBGRiD?
Como posso alterar (destacar) a linha de um item excluído do DBGRiD?
Elton ésqui
Curtidas 0
Respostas
Marco Salles
02/07/2010
Caros
Como posso alterar (destacar) a linha de um item excluído do DBGRiD?
..
Bem se esta excluido não deve aperecer no DbGrid .. Se não aparece no DbGrid não tem
como Destaca-lo . Porém o que vc pode fazer é um campo booleano que qnd se exlui
se alrera o Statu Deste Campo .. Ai sim Vc pode Destacar Todos os Items "Excluidos" da Tabela
( que no nosso caso são campos cujo Status fora Modificado )
Geralmente se usa esta técnica qnd se quer ter um Arquivo Morto ( Algo que não existe , mas
é passivel deLocalização . Por exemplo Clientes que estão Desativados (com certo Periodo que não
compra , ao inves de Exclui-los geralmente alteramos o Seu Status)
Não sei se entendi direito sua dúvida e se vc entendeu a idéia que tentei passar.
Caso te interresse o codigo sera feito no OnDrawDataCell e poderemos lhe passar
Como posso alterar (destacar) a linha de um item excluído do DBGRiD?
GOSTEI 0
Elton ésqui
02/07/2010
No meu caso não excluiu do DBGrid.
Acontece o seguinte:
Após excluir o dbgrid não atualiza. Se eu clicar no próximo item e voltar ao grid dos itens excluídos aí sim o que foi excluído não aparece mais.
Já tentei dbgrid.refresh, repaint...mas nada resolveu.
Segue um trecho do código.
begin
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
Exit;
end;
PageControl1.ActivePage := tsGridCotacao;
sbMontaQuery.Click;
end;
Obs.: Esse Exit; eu coloquei porque estava gerando um erro (list index is out of bounds). Após colocar o exit o erro não ocorre, mas o item fica lá e só some se eu fizer como citei acima. A propósito, são dois grids. o de cima é o qual avanço e volto pra atualizar o grid de baixo.
Acontece o seguinte:
Após excluir o dbgrid não atualiza. Se eu clicar no próximo item e voltar ao grid dos itens excluídos aí sim o que foi excluído não aparece mais.
Já tentei dbgrid.refresh, repaint...mas nada resolveu.
Segue um trecho do código.
begin
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
Exit;
end;
PageControl1.ActivePage := tsGridCotacao;
sbMontaQuery.Click;
end;
Obs.: Esse Exit; eu coloquei porque estava gerando um erro (list index is out of bounds). Após colocar o exit o erro não ocorre, mas o item fica lá e só some se eu fizer como citei acima. A propósito, são dois grids. o de cima é o qual avanço e volto pra atualizar o grid de baixo.
GOSTEI 0
Marco Salles
02/07/2010
No meu caso não excluiu do DBGrid.
Acontece o seguinte:
Após excluir o dbgrid não atualiza. Se eu clicar no próximo item e voltar ao grid dos itens excluídos aí sim o que foi excluído não aparece mais.
Já tentei dbgrid.refresh, repaint...mas nada resolveu.
Segue um trecho do código.
begin
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
Exit;
end;
PageControl1.ActivePage := tsGridCotacao;
sbMontaQuery.Click;
end;
Obs.: Esse Exit; eu coloquei porque estava gerando um erro (list index is out of bounds). Após colocar o exit o erro não ocorre, mas o item fica lá e só some se eu fizer como citei acima. A propósito, são dois grids. o de cima é o qual avanço e volto pra atualizar o grid de baixo.
hummmmmmmmmmm...
DMForm.cdsCota.Delete;Acontece o seguinte:
Após excluir o dbgrid não atualiza. Se eu clicar no próximo item e voltar ao grid dos itens excluídos aí sim o que foi excluído não aparece mais.
Já tentei dbgrid.refresh, repaint...mas nada resolveu.
Segue um trecho do código.
begin
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
Exit;
end;
PageControl1.ActivePage := tsGridCotacao;
sbMontaQuery.Click;
end;
Obs.: Esse Exit; eu coloquei porque estava gerando um erro (list index is out of bounds). Após colocar o exit o erro não ocorre, mas o item fica lá e só some se eu fizer como citei acima. A propósito, são dois grids. o de cima é o qual avanço e volto pra atualizar o grid de baixo.
Não Exclui ni DbGrid ??? Afinal este DbGrid esta Ligado a qual DataSouce ????
GOSTEI 0
Elton ésqui
02/07/2010
Então...exlcuir, exlcui.
Acontece que sem o Exit no código ele exclui e atualiza o grid removendo o item excluído, porém gera o erro que mencionei.
Já com o Exit no código, exclui sem gerar o erro, porém não atualiza o grid removendo o item. Por outro lado, se eu fechar e abrir o programa ou simplesmente navegar nos itens do grid pai, aí exibe o grid filho sem o item removido.
Obrigado!
Acontece que sem o Exit no código ele exclui e atualiza o grid removendo o item excluído, porém gera o erro que mencionei.
Já com o Exit no código, exclui sem gerar o erro, porém não atualiza o grid removendo o item. Por outro lado, se eu fechar e abrir o programa ou simplesmente navegar nos itens do grid pai, aí exibe o grid filho sem o item removido.
Obrigado!
GOSTEI 0
Elton ésqui
02/07/2010
Só para complementar.
Eu queria mudar a cor só para o usuário perceber que excluiu o item, mas depois que ele acessar o item não deve mesmo estar lá.
Se tiver como solução atualizar o grid nem precisa mudar a cor... o lance da cor seria uma paliativa, já q não atualizou o grid.
Eu queria mudar a cor só para o usuário perceber que excluiu o item, mas depois que ele acessar o item não deve mesmo estar lá.
Se tiver como solução atualizar o grid nem precisa mudar a cor... o lance da cor seria uma paliativa, já q não atualizou o grid.
GOSTEI 0
Marco Salles
02/07/2010
No meu caso não excluiu do DBGrid.
Acontece o seguinte:
Após excluir o dbgrid não atualiza. Se eu clicar no próximo item e voltar ao grid dos itens excluídos aí sim o que foi excluído não aparece mais.
Já tentei dbgrid.refresh, repaint...mas nada resolveu.
Segue um trecho do código.
begin
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
Exit;
end;
PageControl1.ActivePage := tsGridCotacao;
sbMontaQuery.Click;
end;
Obs.: Esse Exit; eu coloquei porque estava gerando um erro (list index is out of bounds). Após colocar o exit o erro não ocorre, mas o item fica lá e só some se eu fizer como citei acima. A propósito, são dois grids. o de cima é o qual avanço e volto pra atualizar o grid de baixo.
Mas quem é sbMontaQuery.Click; ???? Codigo ???
O Erro da no sbMontaQuery.Click; ???? ou no PageControl1.ActivePage := tsGridCotacao; ????
So uma curiosidade ... Porque dois Begin (Begini begin) ???? para que isto ????
Coloque o Exit apos o PageControl1.ActivePage := tsGridCotacao; >>> Dá Erro ???Acontece o seguinte:
Após excluir o dbgrid não atualiza. Se eu clicar no próximo item e voltar ao grid dos itens excluídos aí sim o que foi excluído não aparece mais.
Já tentei dbgrid.refresh, repaint...mas nada resolveu.
Segue um trecho do código.
begin
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
Exit;
end;
PageControl1.ActivePage := tsGridCotacao;
sbMontaQuery.Click;
end;
Obs.: Esse Exit; eu coloquei porque estava gerando um erro (list index is out of bounds). Após colocar o exit o erro não ocorre, mas o item fica lá e só some se eu fizer como citei acima. A propósito, são dois grids. o de cima é o qual avanço e volto pra atualizar o grid de baixo.
GOSTEI 0
Elton ésqui
02/07/2010
Ops...excluí o begin duplicado...era pra ver se pegava no tranco..rsrs
begin
{ Excluir }
if DMform.cdsItem.FieldByName('FLAG_BAIXA').value = '1' then
begin
if Application.Messagebox('Este produto já foi pedido, deseja continuar a exclusão?',
'Informação', MB_ICONINFORMATION + MB_YESNO) = IDno then
Exit;
end;
if Application.MessageBox('Deseja excluir a cotação?',
'Confirmação', MB_ICONQUESTION + MB_YESNO) = IDYES then
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
end;
PageControl1.ActivePage := tsGridCotacao;
Exit; // Com o exit aqui acontece o mesmo se deixar depois de "LimparDados;" Exclui mas não atualiza.*
sbMontaQuery.Click;
end;
* Detalhe: O item excluído não some da lista, mas o botão de excluir fica desabilitado!
begin
{ Excluir }
if DMform.cdsItem.FieldByName('FLAG_BAIXA').value = '1' then
begin
if Application.Messagebox('Este produto já foi pedido, deseja continuar a exclusão?',
'Informação', MB_ICONINFORMATION + MB_YESNO) = IDno then
Exit;
end;
if Application.MessageBox('Deseja excluir a cotação?',
'Confirmação', MB_ICONQUESTION + MB_YESNO) = IDYES then
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
end;
PageControl1.ActivePage := tsGridCotacao;
Exit; // Com o exit aqui acontece o mesmo se deixar depois de "LimparDados;" Exclui mas não atualiza.*
sbMontaQuery.Click;
end;
* Detalhe: O item excluído não some da lista, mas o botão de excluir fica desabilitado!
GOSTEI 0
Elton ésqui
02/07/2010
Ah...e o sbMontaQuery é um botão...
Acho qu eo erro ta aqui...Eu deve estar fazendo errado esse sbMOtaQuery.Click.
Minha intenção aqui é após o procedimento executar o botão que atualiza o grid...mas não rolou...acho que falta um Sender...já vi algo assim.
Vamos ver no que da.
Acho qu eo erro ta aqui...Eu deve estar fazendo errado esse sbMOtaQuery.Click.
Minha intenção aqui é após o procedimento executar o botão que atualiza o grid...mas não rolou...acho que falta um Sender...já vi algo assim.
Vamos ver no que da.
GOSTEI 0
Fábio Cruz
02/07/2010
Só para complementar.
Eu queria mudar a cor só para o usuário perceber que excluiu o item, mas depois que ele acessar o item não deve mesmo estar lá.
Se tiver como solução atualizar o grid nem precisa mudar a cor... o lance da cor seria uma paliativa, já q não atualizou o grid.
Eu queria mudar a cor só para o usuário perceber que excluiu o item, mas depois que ele acessar o item não deve mesmo estar lá.
Se tiver como solução atualizar o grid nem precisa mudar a cor... o lance da cor seria uma paliativa, já q não atualizou o grid.
Desculpa a intromissão (ou intromição) tentou dar um close / open na sua query? nem sempre o refresh funciona.
GOSTEI 0
Emerson Nascimento
02/07/2010
após o .Delete não seria necessário executar o .ApplyUpdates() ???
GOSTEI 0
Elton ésqui
02/07/2010
Fiz assim no lance da Query.
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
DMForm.QryCota.Close;
end;
DMForm.QryCota.Open;
PageControl1.ActivePage := tsGridCotacao;
sbMontaQuery.Click;
Sobre o Apply...parece que não chama no Delete.
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
DMForm.QryCota.Close;
end;
DMForm.QryCota.Open;
PageControl1.ActivePage := tsGridCotacao;
sbMontaQuery.Click;
Sobre o Apply...parece que não chama no Delete.
GOSTEI 0
Elton ésqui
02/07/2010
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
end;
PageControl1.ActivePage := tsGridCotacao;
sbMontaQuery.Click;
Seguinte:
O código do jeito que está acima funciona, mas gera o erro ...list index...
Com o exit abaixo de LimparDados não gera o erro, porém não faz sentido, pois eu parei o código ness exit, logo ele não vai executar o sbMontaQuery, mas acho que executa sim, pq depois do erro atualiza o grid. tô confuso...
Acho que deve ter algo relacionado com reindexação...tipo, tinham 5 items na tabela, excluiu 1, ficaram 4...mas gera erro ...list index... pq deve estar lendo 5 items ainda até que seja atualizado.
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
end;
PageControl1.ActivePage := tsGridCotacao;
sbMontaQuery.Click;
Seguinte:
O código do jeito que está acima funciona, mas gera o erro ...list index...
Com o exit abaixo de LimparDados não gera o erro, porém não faz sentido, pois eu parei o código ness exit, logo ele não vai executar o sbMontaQuery, mas acho que executa sim, pq depois do erro atualiza o grid. tô confuso...
Acho que deve ter algo relacionado com reindexação...tipo, tinham 5 items na tabela, excluiu 1, ficaram 4...mas gera erro ...list index... pq deve estar lendo 5 items ainda até que seja atualizado.
GOSTEI 0
Elton ésqui
02/07/2010
Desculpe...com o Exit não executa o sbMontaQuery mesmo...
GOSTEI 0
Marco Salles
02/07/2010
Ops...excluí o begin duplicado...era pra ver se pegava no tranco..rsrs
begin
{ Excluir }
if DMform.cdsItem.FieldByName('FLAG_BAIXA').value = '1' then
begin
if Application.Messagebox('Este produto já foi pedido, deseja continuar a exclusão?',
'Informação', MB_ICONINFORMATION + MB_YESNO) = IDno then
Exit;
end;
if Application.MessageBox('Deseja excluir a cotação?',
'Confirmação', MB_ICONQUESTION + MB_YESNO) = IDYES then
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
end;
PageControl1.ActivePage := tsGridCotacao;
Exit; // Com o exit aqui acontece o mesmo se deixar depois de "LimparDados;" Exclui mas não atualiza.*
sbMontaQuery.Click;
end;
* Detalhe: O item excluído não some da lista, mas o botão de excluir fica desabilitado!
..
Então seu Elton Ésqui ... Parece que o Problema esta em PageControl1.ActivePage := tsGridCotacao;
Vc mesmo Disse
begin
{ Excluir }
if DMform.cdsItem.FieldByName('FLAG_BAIXA').value = '1' then
begin
if Application.Messagebox('Este produto já foi pedido, deseja continuar a exclusão?',
'Informação', MB_ICONINFORMATION + MB_YESNO) = IDno then
Exit;
end;
if Application.MessageBox('Deseja excluir a cotação?',
'Confirmação', MB_ICONQUESTION + MB_YESNO) = IDYES then
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
end;
PageControl1.ActivePage := tsGridCotacao;
Exit; // Com o exit aqui acontece o mesmo se deixar depois de "LimparDados;" Exclui mas não atualiza.*
sbMontaQuery.Click;
end;
* Detalhe: O item excluído não some da lista, mas o botão de excluir fica desabilitado!
PageControl1.ActivePage := tsGridCotacao; Exit; // Com o exit aqui acontece o mesmo se deixar depois de "LimparDados;" Exclui mas não atualiza.*
Agora vamos atacar o problema ... Quem é PageControl1.ActivePage := tsGridCotacao; ?????? se tsGridCotacao tiver um Valor Inexistente ( Por exemplo -5) Não estara na Lista dos PageControl1.ActivePage Então provavelmente Vc Esta passando um Valor errado para PageControl1.ActivePage
GOSTEI 0
Elton ésqui
02/07/2010
PageControl é um TPageControl com duas TabSheets.
Nesse caso o programa está passando para o PageControl que deve ser aberto tsGridCotacao, onde nele há um DBGrid.
Desculpe, eu me confundi, mas o erro ocorre quando não coloco o Exit.
Seja ele antes ou depois de:
...
LimparDados;
end;
PageControl1.ActivePage := tsGridCotacao;
...
Acho que o caminho é por aqui:
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
end;
PageControl1.ActivePage := tsGridCotacao;
xyz
sbMontaQuery.Click;
end;
xyz =
DMForm.QryCota.Close;
DMForm.QryCota.Open;
ou
DMForm.QryCota.Refresh;
...
Nesse caso o programa está passando para o PageControl que deve ser aberto tsGridCotacao, onde nele há um DBGrid.
Desculpe, eu me confundi, mas o erro ocorre quando não coloco o Exit.
Seja ele antes ou depois de:
...
LimparDados;
end;
PageControl1.ActivePage := tsGridCotacao;
...
Acho que o caminho é por aqui:
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
end;
PageControl1.ActivePage := tsGridCotacao;
xyz
sbMontaQuery.Click;
end;
xyz =
DMForm.QryCota.Close;
DMForm.QryCota.Open;
ou
DMForm.QryCota.Refresh;
...
GOSTEI 0
Elton ésqui
02/07/2010
Valeu galera.
Consegui fazendo o seguinte:
procedure TFormPrincipal.SpeedDeleteClick(Sender : TObject);
begin
{ Excluir }
if DMform.cdsItem.FieldByName('FLAG_BAIXA').value = '1' then
begin
if Application.Messagebox('Este produto já foi pedido, deseja continuar a exclusão?',
'Informação', MB_ICONINFORMATION + MB_YESNO) = IDno then
Exit;
end;
if Application.MessageBox('Deseja excluir a cotação?',
'Confirmação', MB_ICONQUESTION + MB_YESNO) = IDYES then
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
end;
with DMForm.QryCotaCons do
begin
Close;
PageControl1.ActivePage := tsGridCotacao;
sbMontaQuery.Click;
end;
end;
Consegui fazendo o seguinte:
procedure TFormPrincipal.SpeedDeleteClick(Sender : TObject);
begin
{ Excluir }
if DMform.cdsItem.FieldByName('FLAG_BAIXA').value = '1' then
begin
if Application.Messagebox('Este produto já foi pedido, deseja continuar a exclusão?',
'Informação', MB_ICONINFORMATION + MB_YESNO) = IDno then
Exit;
end;
if Application.MessageBox('Deseja excluir a cotação?',
'Confirmação', MB_ICONQUESTION + MB_YESNO) = IDYES then
begin
DMForm.cdsCota.Delete;
DBNav1.Enabled := True;
DBNav2.Enabled := True;
Inclusao := False;
GrupoCotacao.Enabled := Inclusao;
LimparDados;
end;
with DMForm.QryCotaCons do
begin
Close;
PageControl1.ActivePage := tsGridCotacao;
sbMontaQuery.Click;
end;
end;
GOSTEI 0