begin process at 2012 02 11 14:51:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de Donnees

 > DBGRID ET SÉLECTION DES COLONNES À AFFICHER À L'EXÉCUTION

DBGRID ET SÉLECTION DES COLONNES À AFFICHER À L'EXÉCUTION


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de Donnees Niveau :Expert Date de création :12/01/2003 Date de mise à jour :13/01/2003 00:04:23 Vu / téléchargé :8 599 / 1 976

Auteur : Delphiprog

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Comment permettre, très simplement, à un utilisateur de chosisir les colonnes qu'il veut voir s'afficher dans un contrôle DbGrid ?

Ce code est une extension d'un précédent code source que j'ai publié sur ce site (création d'indexes à la volée, ou comment modifier l'ordre d'affichage des données en fonction de la colonne sur laquelle on clique).

Aussi, je ne publie ci-dessous que les parties qui ont trait au titre de ce code source.

Le code complet de l'application est contenu dans l'archive zip.

*** IMPORTANT *** : ne peut être compilé avec Delphi édition personnelle (utilisation de la base de données DbDemos).

Source

  • procedure TForm1.PopupMenu1Popup(Sender: TObject);
  • var
  • i : integer;
  • MenuItem : TMenuItem;
  • begin
  • { Effacer tous les éléments de menu }
  • PopupMenu1.Items.Clear;
  • { Créer les éléments de menu }
  • for i:=0 to DbGrid1.Columns.Count - 1 do
  • begin
  • MenuItem := TMenuItem.Create(PopupMenu1);
  • { Ajouter au PopupMenu }
  • PopupMenu1.Items.Add(MenuItem);
  • With MenuItem do
  • begin
  • { Affecter à Caption le titre affiché dans les titres
  • des colonnes du DbGrid }
  • Caption := DbGrid1.Columns[i].Title.Caption;
  • {Cocher les éléments de menu qui sont déjà visibles avant l'appel}
  • Checked := DbGrid1.Columns[i].Visible;
  • {Utilisation de la propriété Tag pour retrouver l'indice de l'élément
  • coché/non coché dans la méthode PopItemClick implémentée ci-dessous}
  • Tag := i;
  • {Affectation d'une méthode Click à l'élément de menu}
  • OnClick := PopItemClick;
  • end;
  • end;
  • end;
  • procedure TForm1.PopItemClick(Sender: TObject);
  • begin
  • {Nous utilisons une référence sur l'élément cliqué}
  • with TmenuItem(Sender) do
  • begin
  • {Inverser son état pour refléter l'état après un click}
  • Checked := not Checked;
  • {Affectation de la propriété Visible du DbGrid en fonction de l'état
  • coché/non coché de l'élément de menu qui vient d'être cliqué }
  • DbGrid1.Columns[Tag].Visible := Checked;
  • end;
  • end;
procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
  i : integer;
  MenuItem : TMenuItem;
begin
  { Effacer tous les éléments de menu }
  PopupMenu1.Items.Clear;
  { Créer les éléments de menu }
  for i:=0 to DbGrid1.Columns.Count - 1 do
  begin
    MenuItem := TMenuItem.Create(PopupMenu1);
    { Ajouter au PopupMenu }
    PopupMenu1.Items.Add(MenuItem);
    With MenuItem do
    begin
      { Affecter à Caption le titre affiché dans les titres
       des colonnes du DbGrid }
      Caption := DbGrid1.Columns[i].Title.Caption;

      {Cocher les éléments de menu qui sont déjà visibles avant l'appel}
      Checked := DbGrid1.Columns[i].Visible;
      {Utilisation de la propriété Tag pour retrouver l'indice de l'élément
      coché/non coché dans la méthode PopItemClick implémentée ci-dessous}
      Tag := i;
      {Affectation d'une méthode Click à l'élément de menu}
      OnClick := PopItemClick;
    end;
  end;
end;

procedure TForm1.PopItemClick(Sender: TObject);
begin
  {Nous utilisons une référence sur l'élément cliqué}
  with TmenuItem(Sender) do
  begin
    {Inverser son état pour refléter l'état après un click}
    Checked := not Checked;
    {Affectation de la propriété Visible du DbGrid en fonction de l'état
     coché/non coché de l'élément de menu qui vient d'être cliqué }
    DbGrid1.Columns[Tag].Visible := Checked;
  end;
end; 

 Conclusion

Le code est amplement commenté.
Réalisé avec D6.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • Dbase.cfgTélécharger ce fichier [Réservé aux membres club]Voir ce fichier368 octets
  • Dbase.dofTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 062 octets
  • Dbase.dprTélécharger ce fichier [Réservé aux membres club]Voir ce fichier375 octets
  • Dbase.dskTélécharger ce fichier [Réservé aux membres club]6 254 octets
  • Dbase.resTélécharger ce fichier [Réservé aux membres club]876 octets
  • UDbase.dcuTélécharger ce fichier [Réservé aux membres club]8 775 octets
  • UDbase.ddpTélécharger ce fichier [Réservé aux membres club]51 octets
  • UDbase.dfmTélécharger ce fichier [Réservé aux membres club]3 045 octets
  • UDbase.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier6 714 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip TABLE DE CORRESPONDANCE TYPES DE DONNÉES API/PASCAL OBJET
Source avec Zip Source avec une capture GÉNÉRER DES PDF AVEC DELPHI ET PDF CREATOR
Source avec Zip Source avec une capture DESIGN PATTERN OBSERVER : IMPLÉMENTATION RÉUTILISABLE
Source avec Zip DESIGN PATTERN STRATÉGIE APPLIQUÉ AU CODE "JOURNAL DE DÉBUGG...
Source avec Zip Source avec une capture DESSINER UN RECTANGLE DE SÉLECTION AU DESSUS D'AUTRES COMPOS...

 Sources de la même categorie

Source avec Zip Source avec une capture STOCKEUR CODE SOURCE par PythonGreg
Source avec Zip Source avec une capture EXEMPLE UTILISATION DBGRID par HAFTARIFOUAD
Source avec Zip EXPORTE TABLE VER EXCEL par apcmorsott
Source avec Zip Source avec une capture BAK_RESORT POUR SGBD INTERBASE par solitair
Source avec Zip Source avec une capture GESTION DES CODE POSTAUX AVEC UNE BASE ACCESS par AlexFr23

Commentaires et avis

Commentaire de spocks50 le 17/01/2003 06:03:44

Hello ! Jai essayer ton Programme et ce message es apparu :You have received the following message:

Project xxxx raised exception class yyyyy with message 'zzzzzz'.

Process stopped.  Use Step or Run to continue.

Commentaire de osegouin le 21/04/2004 15:31:41

Bonjour
Merci de ton code, j'ai compris pas mal de chose sur les dbgrids.
juste un petit probleme comment sauvegarder le choix des colonnes de l'utilisateur , pour lors d'une future ouverture son choix soit de nouveau actif, sans avoir a tout refaire
merci encore
a+
Olivier

Commentaire de Delphiprog le 21/04/2004 22:47:33 administrateur CS

C'est très simple. A la création de la fiche, il suffit de lire un fichier contenant toute les valeurs des propriétés du composant DbGrid1 :
procedure TForm1.FormCreate(Sender: TObject);
begin
  if FileExists('Grid.opt') then
    ReadComponentResFile('Grid.opt', DbGrid1);
  Table1.Open;
  //.. reste du code
end;

Et, avant de fermer la fiche, de sauvegarder les valeurs des prorpiétés publiées du composant :
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   WriteComponentResFile('grid.opt', DbGrid1);
end;

Il n'y a rien de plus à faire !

Commentaire de osegouin le 22/04/2004 11:35:04

Merci beaucoup
cela fonctionne sans probleme
et oui encore une nouvelle fonction de decouverte ;o)
Olive

Commentaire de Patalou le 14/09/2004 16:38:15

Salut, cet exemple est très bien pour montrer comment ceci marche.
J'ai une question, tu fais
OnClick := PopItemClick;
donc tu associes une procédure quand on clique sur l'élément.
Je me suis inspiré de ce code et je désire faire de même
OnCLick mais il ne me propose que les var, const, type mais pas de procédure.
Est-ce moi qui n'est pas compris ou alors fais-je mal ?
(en gros chuis dans les choux).
Merci pour ta réponse.

Commentaire de Delphiprog le 14/09/2004 22:55:31 administrateur CS

Patalou, tu peux affecter n'importe quelle méthode à un évènement donné, du moment que la signature est identique à celle de la méthode ciblée.
En clair, une méthode Click d'un objet est ainsi définie :
property onClick : TNotifyEvent;
Et TNotifyEvent est à son tour déclaré de la manière suivante :
TNotifyEvent = procedure(Sender: TObject) of object;

Delphi fait beaucoup pour nous faciliter l'écriture du code (avec une vitesse remarquable par rapport à d'autres environnements de développement), mais il faut encore parfois amorcer la complétion de code.
Si tu tapes les premières lettres après l'affectation et que tu appuies sur [CTRL]+[J], tu devrais voir apparaître les affectations possibles dans la liste déroulante.

Commentaire de Patalou le 15/09/2004 07:55:09

Merci pour ton aide.
J'ai résolu mon problème qui était un peu plus compliqué et un peu différent car je désirais lancer une procédure du Parent de mon objet, j'ai donc fait une procédure intermédiaire dans l'objet qui lance celle du parent.
Car je pense que le problème provenait du fait qu'au moment de la compilation il ne connaissait pas son Parent encore car il est créé dynamiquement pendant l'execution et lié à son parent (lui aussi dynamique) dans le constructeur du parent.

Merci encore pour ton aide et pour ces codes fournis qui sont une bonne base pour apprendre et comprendre.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,936 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales