jeudi 18 juillet 2019

Delphi: Ajuster la largeur des colonnes du composant DBGrid au contenu

Cette procédure permet d'ajuster la largeur des colonnes du composant DBGrid au contenu.

 

 //--------------------------------------------------------------------------------------------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
   TForm1 = class(TForm)

   .....
   .....
   DBGrid1: TDBGrid;
   Procedure AutoSizeColDBGrid(DBGrid:TDBGrid); // <---- Déclaration de La procédure ici
   private

     { Private declarations }
   public
     { Public declarations }
   end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//TForm1.AutoSizeColDBGrid(DBGrid:TDBGrid); pour qu'on puisse appeler cette procédure depuis d'autres unités du projet

Procedure TForm1.AutoSizeColDBGrid(DBGrid:TDBGrid);
var i, ColWidth, ColTextWidth:integer;
begin
if DBGrid.DataSource.DataSet.Active then
 begin
  DBGrid.DataSource.DataSet.DisableControls;
  for i:= 0 to DBGrid.Columns.Count-1 do
    begin
       ColWidth:=DBGrid.Canvas.TextWidth(DBGrid.Columns[i].Field.DisplayLabel);
             DBGrid.DataSource.DataSet.First;
             while not DBGrid.DataSource.DataSet.EOF do
               begin
                ColTextWidth:=DBGrid.Canvas.TextWidth(DBGrid.Columns[i].Field.DisplayText);
                  if (ColTextWidth>ColWidth) then
                   begin
                    ColWidth:=ColTextWidth;
                   end;
                 DBGrid.DataSource.DataSet.Next;
               end;{while}
       DBGrid.Columns[i].Width:=ColWidth+30;
  end;{for}
  DBGrid.DataSource.DataSet.EnableControls;
  DBGrid.DataSource.DataSet.First;
 end;
end;

//-----------------------------------------------------------------------------------------

On doit appeler la procédure
[Procedure AutoSizeColDBGrid(DBGrid:TDBGrid);] après chaque ajout d’un nouvel enregistrement, modification d’un enregistrement, suppression d’un enregistrement, filtrage des données pour l’affichage des enregistrements spécifiques , ou d’exécution des requêtes SQL qui permettent de faire les recherches sur les données de la base de données, Exemples:

//Appeler cette procédure depuis l'unité en cours unit1 {Form1} après l'ajout ou la modification d'un enregistrement
procedure TForm1.ADOTable1AfterPost(DataSet: TDataSet);
begin
    AutoSizeColDBGrid(DBGrid1);
end

//Appeler cette procédure qui se trouve dans unit1 {Form1} depuis une autre unité du projet après la suppression d'un enregistrement
procedure TForm2.ADOTable2AfterDelete(DataSet: TDataSet);
begin
   Form1.AutoSizeColDBGrid(DBGrid1);
end;


Aucun commentaire:

Enregistrer un commentaire