GARANTIR DESCONTO

Fórum Mudar cor da linha DBGRID #380541

02/07/2010

0

Caros

Como posso alterar (destacar) a linha de um item excluído do DBGRiD?
Elton ésqui

Elton ésqui

Responder

Posts

02/07/2010

Marco Salles

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
Responder

Gostei + 0

05/07/2010

Elton ésqui

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

Gostei + 0

05/07/2010

Marco Salles

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;
Não Exclui ni DbGrid ??? Afinal este DbGrid esta Ligado a qual DataSouce ????  
Responder

Gostei + 0

05/07/2010

Elton ésqui

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

Gostei + 0

05/07/2010

Elton ésqui

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

Gostei + 0

05/07/2010

Marco Salles

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 ???


 
Responder

Gostei + 0

06/07/2010

Elton ésqui

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

Gostei + 0

06/07/2010

Elton ésqui

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

Gostei + 0

06/07/2010

Fábio Cruz

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.


Desculpa a intromissão (ou intromição) tentou dar um close / open na sua query? nem sempre o refresh funciona.
Responder

Gostei + 0

06/07/2010

Emerson Nascimento

após o .Delete não seria necessário executar o .ApplyUpdates() ???
Responder

Gostei + 0

06/07/2010

Elton ésqui

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

Gostei + 0

06/07/2010

Elton ésqui

  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.

Responder

Gostei + 0

06/07/2010

Elton ésqui

Desculpe...com o Exit não executa o sbMontaQuery mesmo...
Responder

Gostei + 0

06/07/2010

Marco Salles

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  
PageControl1.ActivePage := tsGridCotacao;
Exit; // Com o exit aqui acontece o mesmo se deixar depois de "LimparDados;" Exclui mas não atualiza.*
  Da o Erro Do Indice e não Atualiza pq chama o Exit antes do sbMontaQuery.Click

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  
Responder

Gostei + 0

06/07/2010

Elton ésqui

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;

...


Responder

Gostei + 0

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

Aceitar