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 / Exemple :
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.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.