Profil de EmersonEspaço de Emerson Santon...BlogRéseauSkyDrive Outils Aide

Blog


14 janvier

As surpresas do controle grid

Sempre achei o controle grid do VFP limitado... até o dia em que Cetin Basoz (Universal Thread) me disse algo que é óbvio, mas nunca havia parado para pensar: é possível inserir em uma coluna do grid qualquer tipo de controle: image, editbox, grid, container, etc.

Inserir outros controles nas colunas do grid é mais fácil do que você pode imaginar e, dependendo do que você deseja fazer, não necessite de nenhuma linha de código!

Quer saber como? Baixe aqui o exemplo desenvolvido com o VFP 9 e leia com atenção o tutorial abaixo.

A base de dados

No exemplo serão utilizadas duas tabelas: Equipes (tabela pai) e Membros (tabela filho).
Ambas pertencem ao banco de dados Empresas e são relacionadas através do campo pkEquipe (chave primária da tabela pai) e fkEquipe (chave estrangeira da tabela filho).

O form e o ambiente de dados

Crie um form e adicione ao Data Environment as duas tabelas.
Note que, pelo fato de existir uma integridade referencial entre elas, ao adiciona-las, automaticamente é criado um relacionamento.
Configure a propriedade InitialSelectedAlias do Data Environment para que a tabela Equipes seja selecionada ao abrir o form.

O grid

Crie um grid e configure as propriedades (na barra de ferramentas Properties) ColumnCount como 2 e RecordSource como Equipes.
Na barra de ferramentas Properties, selecione o controle textbox da coluna 1 do grid, clique na barra de título do form, pressione a tecla Delete e confirme a exclusão do controle textbox.
Repita o procedimento acima na coluna 2.
Até aqui, nenhuma novidade. O grid será utilizado para navegar pelos registros da tabela Equipes.

Os objetos que serão incluídos no grid

Crie um container e adicione a ele os seguintes controles: image, textbox e editbox.
Configure a propriedade ControlSource dos controles textbox e editbox como Equipes.NomeEquipe e Equipes.Observacoes respectivamente.
Configure a propriedade PictureVal do controle image como Equipes.Logotipo.
Clique no controle container, pressione CTRL+X e, em seguida, clique com o botão direito do mouse no grid, selecione a opção Edit no menu de atalho; clique na coluna 1 do grid e pressione CTRL+V.
O container será utilizado para exibir os dados do registro atual da tabela Equipes.

Crie mais um grid e configure as propriedades (na barra de ferramentas Properties) ChildOrder como fkEquipe, ColumnCount como 3, LinkMaster como Equipes, RecordSource como Membros e RelationalExpr como pkEquipe.
Configure a propriedade ControlSource das colunas 1, 2 e 3 como Membros.Membro, Membros.Cargo e Membros.Plataforma respectivamente.
Clique no grid, pressione CTRL+X e, em seguida, clique com o botão direito do mouse no grid1, selecione a opção Edit no menu de atalho; clique na coluna 1 do grid1 e pressione CTRL+V.
O grid será utilizado para exibir os registros da tabela Membros correspondentes ao registro da tabela Equipes.

Ooops, o que aconteceu com o logotipo?

Se você executar o form neste momento, perceberá que o logotipo exibido em todos os registros é o mesmo. Não se assuste!
Para exibir o logotipo correspondente seria necessário que o VFP reavaliasse a propriedade PictureVal a cada registro (assim como a propriedade ControlSource), o que não ocorre.
Então não é possível exibir uma imagem diferente para cada registro? Sim, é possível.
Crie um método no form chamado Imagem e digite nele o seguinte comando:

WITH THISFORM.o_grid1.Column1.o_container1
   .o_image1.PICTUREVAL = equipes.logotipo
ENDWITH

Configure a propriedade DynamicBackColor da coluna 1 do grid1 como ThisForm.Imagem().
A propriedade DynamicBackColor é reavaliada a cada mudança de registro na tabela. Incluindo a chamada ao método Imagem nesta propriedade, o logotipo será exibido corretamente.

Conclusão

Qualquer versão do Visual FoxPro permite a inserção de objetos nas colunas do grid.
A exceção fica por conta do armazenamento da imagem em um campo do tipo BLOB na tabela e da propriedade PictureVal do controle image (versão 9) e de algumas propriedades relativas ao layout dos controles (implementadas a partir da versão 8).
Agora, é só trabalhar o layout dos controles para que o resultado seja agradável para os usuários. Veja a figura abaixo:

artigo1

Commentaires

Veuillez patienter...
Le commentaire entré est trop long. Raccourcissez-le.
Vous n'avez rien entré. Réessayez.
Il est actuellement impossible d'ajouter votre commentaire. Réessayez plus tard.
Pour ajouter un commentaire, tu dois avoir l'autorisation de tes parents. Demander l'autorisation
Tes parents ont désactivé les commentaires.
Il est actuellement impossible de supprimer votre commentaire. Réessayez plus tard.
Vous avez dépassé le nombre maximal de commentaires qu'il est possible d'envoyer le même jour. Réessayez dans 24 heures.
Votre compte a pu laisser les commentaires désactivés parce que nos systèmes indiquent que vous risquez d'arroser d'autres utilisateurs de messages. Si vous pensez que votre compte a été désactivé par erreur, contactez l'assistance en ligne de Windows Live.
Effectuez la vérification de sécurité ci-dessous pour finaliser l'envoi de votre commentaire.
Les caractères entrés pour la vérification de sécurité doivent correspondre à ceux de l'image ou du fichier audio.

Pour ajouter un commentaire, connectez-vous avec votre identifiant Windows Live ID (si vous utilisez Messenger ou Xbox LIVE, vous avez un identifiant Windows Live ID). Connectez-vous


Vous n'avez pas d'identifiant Windows Live ID ? Inscrivez-vous

Rétroliens

L'URL de rétrolien de ce billet est :
http://emersonreed.spaces.live.com/blog/cns!7CAEAE63ED3A9A67!188.trak
Blogs Web qui font référence à ce billet
  • Aucune