Mise en forme largeur de colonne datagrid automatique

Signaler
Messages postés
14
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
30 décembre 2004
-
Messages postés
14
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
30 décembre 2004
-
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

Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

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
Messages postés
14
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
30 décembre 2004

très bonne astuce !!!
Merci beaucoup Moustachu !!!

yeye