Mise en forme largeur de colonne datagrid automatique

yeyedeb Messages postés 14 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 30 décembre 2004 - 24 mai 2004 à 16:55
yeyedeb Messages postés 14 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 30 décembre 2004 - 25 mai 2004 à 10:26
Bonjour,

je cherche, en vain, à mettre en forme automatiquement la largeur des colonnes d'un datagrid.
J'ai écrit la petite procédure qui suit, elle a pour but de parcourir chaque cellule de la datagrid, par ligne et par colonne, de retenir la longueur du texte la plus élevée (maxcol) et de renseigner la largeur de la colonne avec cette dernière.
Ce code fonctionne, MAIS, la fonction "GridColumnStyles(icol).Width" à une valeur en PIXEL !!!
ainsi, comme ma variable MAXCOL n'est pas de cette mesure, je vous laisse imaginer la taille de mes colonnes !! :(
Il y a peut être la fonction "DataGridPreferredColumnWidthTypeConverter" qui permettrait de convertir le pixel en autre chose, mais je n'arrive pas à la faire fonctionner... si qq'un à un exemple, ou une autre façon de dimensionner les colonnes...
merci d'avance !

yeye

****** code ********************
Sub misenforme()

Dim i, o, c, irows, icol, maxcol As Integer
Dim contenu As String

Me.DataGrid1.TableStyles.Clear()
Dim tableStyle As New DataGridTableStyle
tableStyle.MappingName = "SUPPORT"
Me.DataGrid1.TableStyles.Add(tableStyle)

'on parcourt toutes les colonnes de la datagrid
For i = 0 To Me.DataGrid1.VisibleColumnCount - 1
maxcol = 0 'initialise la taille maxi que peut prendre la colonne
icol = i
'idem pour toutes les lignes
For o = 0 To Me.DataGrid1.VisibleRowCount - 1
irows = o
'si la valeur contenue la cellule est de type Null, on met la valeur à blanc
If Me.DataGrid1.Item(irows, icol) Is DBNull.Value Then
contenu = " "
Else : contenu = Me.DataGrid1.Item(irows, icol)
End If
'taille du contenu de la cellule
'comparaison avec la valeur maxi en cours
c = contenu.Length
If c > maxcol Then maxcol = c
Next o

DataGrid1.TableStyles("SUPPORT").GridColumnStyles(icol).Width = maxcol

Next i

End Sub

2 réponses

cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
24 mai 2004 à 17:28
Il existe une astuce. Cela consiste à renseigner un label masqué en autosize=true avec les valeurs de tes cellules. Tu gardes en mémoire la plus grande largeur du label que tu assignes à la largeur de la colone.

J'ai pas mieux

++
moustachu
0
yeyedeb Messages postés 14 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 30 décembre 2004
25 mai 2004 à 10:26
très bonne astuce !!!
Merci beaucoup Moustachu !!!

yeye
0
Rejoignez-nous