Bonjour,
Je rencontre un petit souci avec le redimensionnement automatique des colonnes.
Il peut arriver que certaines colonnes soient bien plus grandes qu'elles ne devraient l'être.
En règle générale, le problème concerne les types de données de type ftString avec des tailles de champ de 255 caractères.
Exemple avec une table sans aucune données
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 { Private : AutoColumnWidth } procedure TFMyDB.AutoColumnWidth; const Marge = 10; var TextWidth, I, RecNo: Integer; ColWidth: array of Integer; begin with DBTable do // TDBGrid begin SetLength(ColWidth, Columns.Count); DataSource.DataSet.DisableControls; RecNo := DataSource.DataSet.RecNo; Canvas.Font := Font; for I := 0 to Columns.Count - 1 do ColWidth[I] := Canvas.TextWidth(Columns[I].Title.Caption) + Marge; DataSource.DataSet.First; if DataSource.DataSet.RecordCount > 0 then begin while not DataSource.DataSet.Eof do begin for I := 0 to Columns.Count - 1 do begin TextWidth := Canvas.TextWidth(Columns[I].Field.DisplayText); if TextWidth > ColWidth[I] then ColWidth[I] := TextWidth + Marge; end; DataSource.DataSet.Next; end; end; for I := 0 to Columns.Count - 1 do Columns[I].Width := ColWidth[I]; SetLength(ColWidth, 0); DataSource.DataSet.RecNo := RecNo; DataSource.DataSet.EnableControls; end; end;
On peut observer que la colonne Titre ne présente aucune donnée et qu'elle est excessivement longue par rapport à la longueur du titre de la colonne.
En effet, le DBGrid attribue automatiquement des largeurs de colonnes en fonction du type de données de la colonne, Selon moi, c'est la cause du problème (Si la valeur attribuée de la colonne est plus grande que la longueur du titre de la colonne, elle n'est forcément pas redimensionnée).
A l'inverse, centaine de colonnes sont aussi surdimensionnées par rapport à ce qu'elles contiennent (Toujours avec un type de données ftString).
Dans cette situation, les données de la colonne (Langue) ne dépassent pas une longueur de ~30 caractères. Il est évident que cette colonne est surdimensionnée par rapport à son contenu.
Auriez-vous une petite idée du problème?
Merci![]()










Répondre avec citation



Partager