Tdbgrid avec ajustement automatique de la largeur des colonnes

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 921 fois - Téléchargée 34 fois

Contenu du snippet

J'en avais marre de devoir ajuster les colonnes d'une dbgrid à chaque connection avec des données.
Voici donc ce que j'ai fait et qui marche bien dans mon appli (Delphi 7).

Source / Exemple :


TFitDBGrid = class(TDBGrid)
  protected
    procedure LinkActive(Value: Boolean); override;
  end;

...

procedure TFitDBGrid.LinkActive(Value: Boolean);
var
  W : array[0..256] of integer; // Limite à 256 colonnes, on peut faire plus ou un tableau dynamique
  l,c : Integer;
begin
  inherited;
  if Value then // Ajustement des colonnes
    with Datasource.DataSet do
      try
        DisableControls;
        for c := 0 to Columns.Count-1 do
          W[c] := Canvas.TextWidth(Columns[c].Title.Caption +'W'); // Largeur des titres avec un espace supplementaire
        First;
        while not EOF do begin
          for c := 0 to Columns.Count-1 do
            if assigned(Columns[c].Field) then begin
              l := Canvas.TextWidth(Columns[c].Field.asString+'W'); // Largeur des données
              if W[c] < l then W[c] := l;
            end;
          Next;
        end;
        for c := 0 to Columns.Count-1 do
          Columns[c].Width := W[c];
      finally
        EnableControls;
      end;
end;

Conclusion :


Ca met un peut de temps, car il faut parcourir tous les enregistrements de la table mais c'est toujours plus rapide et plus pratique pour l'utilisateur que de faire ça à la main.
J'attends vos remarques et suggestions.

A voir également

Ajouter un commentaire

Commentaires

cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
23 -
Voici un code similaire avec le redimensionnement automatique des colonnes appelable depuis n'importe où dans l'application :
http://www.delphifr.com/code.aspx?id=21485
et sans limite de colonnes et qui s'applique à tout descendant de TCustomDbGrid, ce qui est moins restrictif quand on veut l'utiliser avec des composants tiers héritant de cette classe.
Faites votre choix !
cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
23 -
W : array[0..256] of integer; // Limite à 256 colonnes
Euh...ça fait 257 colonnes ou je n'y connais plus rien ! ;o)

Puisque tu parles de tableaux dynamiques, pourquoi ne pas les utiliser au lieu de déclarer un tableau statique ?
W : array of integer;
Ensuite, tu dimensionnes précisément :

if Value then // Ajustement des colonnes
With Datasource.DataSet do
try
DisableControls;
SetLength(W, Columns.Count);
for c := 0 to Columns.Count-1 do
...

Si je ne m'abuse, ton code uniformise la largeur de toutes les colonnes avec la plus grande largeur nécessaire, c'est bien cela ?
aziz1982
Messages postés
1
Date d'inscription
jeudi 25 juillet 2013
Statut
Membre
Dernière intervention
27 octobre 2015
-
merci

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.