Fórum Grid Seleciona Todos Registros ao Mesmo Tempo #293616
29/08/2005
0
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
Curtir tópico
+ 0Posts
30/08/2005
Massuda
Gostei + 0
30/08/2005
Aersoftware
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:
Gostei + 0
30/08/2005
Massuda
Gostei + 0
30/08/2005
Martins
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!!!
Gostei + 0
30/08/2005
Aersoftware
Allan Elias Ramos :wink:
Gostei + 0
30/08/2005
Aersoftware
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:
Gostei + 0
31/08/2005
Massuda
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;
Gostei + 0
31/08/2005
Aersoftware
Allan Elias Ramos :wink:
Gostei + 0
31/08/2005
Massuda
Gostei + 0
31/08/2005
Aersoftware
É 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:
Gostei + 0
31/08/2005
Aersoftware
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:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)