Fórum Grid Seleciona Todos Registros ao Mesmo Tempo #293616

29/08/2005

0

Oi pessoal, tudo bem? Espero que sim.

Eu tenho alguns formulários que tem uma grid pra exibição de dados. Todos eles funcionaram até agora, com as configurações da Grid. Neles fica só selecionado o registro em questão. Quando uso as setas, ele muda de registro selecionado e quando clico em algum registro ele muda tb.

Mas num form ele ta dando erro. Coloquei as mesmas configurações, mas sempre que seleciono registros diferentes com o Mouse, ele seleciona mas continua com os o outro selecionado. Funciona como se eu tivesse selecionando vários de uma vez só. E quando mudo com as setas, o registro nos componentes muda, mas na grid fica selecionado sempre o ultimo que esteve com o foco, nao mudando.

As configurações estão assim:

dgEditing = False;
dgAlways ShowEditor = False;
dgTitles = True;
dgIndicator = False;
dgClimnResize = False;
dgColLines = True;
dgRowLines = True;
dgTabs = True;
dgRowSelect = True;
dgAlwaysShowSelection = False;
dgConfirmDelete = True;
dgCancelOnExit = True;
dgMultiSelect = False;

Isso ja aconteceu com alguem?



Allan Elias Ramos :roll:


Aersoftware

Aersoftware

Responder

Posts

30/08/2005

Massuda

Você está usando algum tipo de desenho personalizado (OnDrawColumnCell) nesse grid problemático?


Responder

Gostei + 0

30/08/2005

Aersoftware

Você está usando algum tipo de desenho personalizado (OnDrawColumnCell) nesse grid problemático?


Sim, Massuda. Exatamente no OnDrawColumnCell, pra listar a grid zebrada. Tentei inclusive comentar esse código no evento pra rodar sem ele e continuou do mesmo jeito.

Se quiser posso colocar aqui, quando chegar em casa, uns printscreens do que esta acontecendo com o grid.



Allan Elias Ramos :wink:


Responder

Gostei + 0

30/08/2005

Massuda

..Se quiser posso colocar aqui, quando chegar em casa, uns printscreens...
Não precisa das imagens (vamos colaborar com o pessoal que tem conexão discada)... apenas poste aqui o código do seu desenho personalizado do grid.


Responder

Gostei + 0

30/08/2005

Martins

[quote:e8909f231b=´AerSoftware´]..Se quiser posso colocar aqui, quando chegar em casa, uns printscreens...
Não precisa das imagens (vamos colaborar com o pessoal que tem conexão discada)... apenas poste aqui o código do seu desenho personalizado do grid.[/quote:e8909f231b]

Valew [b:e8909f231b]Massuda[/b:e8909f231b], :D Eu as vezes estou em uma conexão discada e esperar uma img ser carregada é brincadeira. Sim vamos ao problema do nnosso colega, ele diz q o grid dele está selecionando vários registros, ou seja ele está armazenando os reg. selecionados e não limpa, seria interessante vc postar aqui o código q vc tá utilizando no form onde ocorreu esse erro, já q vc comentou o condigo para zebrar o grid e o erro continuou, posta aqui, q fica melhor pro pessoal dá uma força.

Falow!!!


Responder

Gostei + 0

30/08/2005

Aersoftware

hehehe.. ta certo pessoal, assim que eu chegar em casa eu posto os códigos certinhos aqui. De qualquer jeito, sempre posto imagens nos fóruns em forma de links, justamente pra não dar problema de carregar.



Allan Elias Ramos :wink:


Responder

Gostei + 0

30/08/2005

Aersoftware

Bom, ta aí o código q eu uso no OnDrawColumnCell desse Grid com problemas.

procedure TFrmEditorasNac.DbGridEditorasNacDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if not odd(DmDados.ClientEditorasNac.RecNo) then
    if not (gdSelected in State) then
      begin
        DbGridEditorasNac.Canvas.Brush.Color := clMoneyGreen;
        DbGridEditorasNac.Canvas.FillRect(Rect);
        DbGridEditorasNac.DefaultDrawDataCell(Rect, Column.Field, State);
      end;
      
end;


Eu tenho sempre um código de exemplo que uso pra isso, e a única diferença desse aí de cima pro de exemplo é q o de exemplo é comentado.

Também tenho essa linha de código no OnShow do form, relacionado ao Grid.

  ShowScrollBar(DbGridEditorasNac.Handle, Sb_Horz, false);


Outra coisa estranha é, se eu mudo a Opção dgMultiSelect pra True, eu até consigo navegar pelo grid sem selecionar todos campos, mas até de poder selecionar multiplos registros (o que não quero), não consigo navegar com as setas. Ele até muda de registro (dando pra perceber pelos campos do formulário, mas o campo da grid selecionado é sempre o mesmo.

Vou botar aqui também o mesmo código da Grid que uso pra outro formulário que funciona perfeitamente.


procedure TFrmGrupos.DbGridGruposDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if not odd(DmDados.ClientGrupos.RecNo) then // se for ímpar
    if not (gdSelected in State) then // se a célular não estiver selecionada
      begin
        DbGridGrupos.Canvas.Brush.Color := clMoneyGreen; // Define uma cor de fundo
        DbGridGrupos.Canvas.FillRect(Rect); // Pinta a célula
        //pinta o texto padrão
        DbGridGrupos.DefaultDrawDataCell(Rect, Column.Field, State);
      end;




Allan Elias Ramos :wink:


Responder

Gostei + 0

31/08/2005

Massuda

Bom, ta aí o código q eu uso...
Fiz alguns testes e deu para perceber que tem um problema com a flag gdSelected quando o grid está com a opção dgMultiSelect habilitada.

O que acontece é que nem sempre uma linha selecionada (mas que não tem o foco) vem marcada com a flag gdSelected. Para resolver isso, faça algo assim...
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Grid: TDBGrid;
begin
  Grid := Sender as TDBGrid;

  if not ((gdSelected in State) or 
    Grid.SelectedRows.CurrentRowSelected) then begin

    if not Odd(Grid.DataSource.DataSet.RecNo) then begin

      Grid.Canvas.Brush.Color := clMoneyGreen;;
    end;
  end;
  Grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Nota: não precisa do FillRect e deveria chamar DefaultDrawColumnCell ao invés de DefaultDrawDataCell.


Responder

Gostei + 0

31/08/2005

Aersoftware

Não funcinou Massuda. Acho até que o problema não é nesse procedimento, já que ele lista certinho a grid zebrada.



Allan Elias Ramos :wink:


Responder

Gostei + 0

31/08/2005

Massuda

Não funcinou...
Eu tinha testado e pelo que vi algumas linhas que eram selecionadas eram desenhadas de modo incorreto (cor de fundo errada)... mas só agora que percebi :oops: ... seu grid está com dgMultiSelect = False.


Responder

Gostei + 0

31/08/2005

Aersoftware

[quote:619f34d3ef=´AerSoftware´]Não funcinou...
Eu tinha testado e pelo que vi algumas linhas que eram selecionadas eram desenhadas de modo incorreto (cor de fundo errada)... mas só agora que percebi :oops: ... seu grid está com dgMultiSelect = False.[/quote:619f34d3ef]

É verdade. Eu vou testar o seguinte: vou refazer o form. Não é muito grande, não vai dar trabalho. Se o problema persistir, eu posto aqui devolta.

Valeu Massuda, abraços..



Allan Elias Ramos :wink:


Responder

Gostei + 0

31/08/2005

Aersoftware

Amigo Massuda, descobri o erro.

Refazendo o formulário eu fui fazendo os testes. Eu tenho 3 campos nessa tabela, mas exibo apenas 1, que é o nome, deixando Código e Descrição invisíveis.

Aí que esta o erro. Se eu entrar no Editing da Grid, listar os 3 campos e colocar esses dois como invisíveis, esse erro acontece. Eu entrei la novamente e removi esses campos, deixando apenas o nome, aí funcionou perfeitamente.

Outra dúvida. Eu removi o form anterior e criei outro. Apaguei todas as referencias dele. Quando eu boto pra compilar (delphi 2005), ele aparece no Event Log um comando em vermelho, mas compila e executa mesmo assim. Só q o log vai rapido demais e nao consigo ler o que é isso. Tem como eu achar esse log em algum lugar pra descobrir o erro?

Abraços



Allan Elias Ramos :wink:


Responder

Gostei + 0

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

Aceitar