Accueil > > > REDIMENSIONNER LES COLONNES D'UN CONTRÔLE DATAGRID D'APRÈS SON CONTENU
REDIMENSIONNER LES COLONNES D'UN CONTRÔLE DATAGRID D'APRÈS SON CONTENU
Information sur la source
Description
Cette fonction permet d'ajuster la largeur des colonnes d'un contrôle DataGrid en fonction de leur contenu : entête de la colonne, contenu des enregistrements, en fonction de la police de caractères. Pré-requis : - il faut créer un TableStyle pour la DataTable associée à la grille en tant que DataSource. - il faut créer un GridColumnStyle pour chaque colonne à afficher dans la grille, avec une taille (Width) > 0 Comportement : - s'il n'y a pas de TableStyle associé à la grille pour DataSource, une exception est levée. - si une colonne ne possède pas de GridColumnStyle, elle est ignorée lors du redimensionnement. - si une colonne possède un GridColumnStyle avec une taille (Width) égale à 0, elle est ignorée lors du redimensionnement. - fonctionne pour les DataGridTextBoxColumnStyle et les DatagridBoolColumnStyle, quel que soit le type de donnée de la colonne (Int16, Int32, String, Decimal, Double, etc...) - la DataSource de la grille, peut être un DataView pointant sur un DataTable, un DataTable, un DataSet avec un des DataTable qu'il contient. Jetez un coup d'oeil sur l'image en début.
Source
Private Sub DataGridColumnAutoResize(ByRef oDataGrid As DataGrid)
Dim ds As DataSet
Dim dt As DataTable
Dim dw As DataView
Dim row As DataRow
Dim c As DataColumn
Dim i As Integer
Dim v() As Object
Dim o As Object
Dim maxcolsize() As Single
Dim sg As Single
Dim col_font As Font
Dim header_font As Font
Dim g As Graphics
Dim s As String
Dim tmp_sz As SizeF
Dim nbcol As Integer = -1
Dim nbgcs As Integer = -1
Dim ColumnResizedIndexes() As Integer = Nothing
Dim GridColumnStyleResizedIndexes() As Integer = Nothing
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' les colonnes dont la largeur (width) a été positionnée à 0 auparavant sont considérées
' comme masquées et sont laissées telles quelles
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' la source de données doit être une Datatable, un Dataview ou un DataSet
If TypeOf oDataGrid.DataSource Is DataTable Then
dt = CType(oDataGrid.DataSource, DataTable)
ElseIf TypeOf oDataGrid.DataSource Is DataView Then
dw = CType(oDataGrid.DataSource, DataView)
dt = dw.Table
ElseIf TypeOf oDataGrid.DataSource Is DataSet Then
ds = CType(oDataGrid.DataSource, DataSet)
dw = Nothing
dt = ds.Tables(oDataGrid.DataMember)
Else
Throw New Exception("DataGridColumnAutoResize : la source de données pour n'est pas valide.")
Exit Sub
End If
Dim tabname As String = dt.TableName
If Not oDataGrid.TableStyles.Contains(tabname) Then
Throw New Exception("DataGridColumnAutoResize : le TableStyle '" + tabname + "' n'existe pas.")
Exit Sub
End If
g = oDataGrid.CreateGraphics()
i = 0
For Each c In dt.Columns
If oDataGrid.TableStyles(tabname).GridColumnStyles.Contains(c.ColumnName) Then
nbgcs += 1
If oDataGrid.TableStyles(tabname).GridColumnStyles(nbgcs).Width > 0 Then
nbcol += 1
ReDim Preserve ColumnResizedIndexes(nbcol)
ColumnResizedIndexes(nbcol) = i
ReDim Preserve GridColumnStyleResizedIndexes(nbcol)
GridColumnStyleResizedIndexes(nbcol) = nbgcs
End If
End If
i += 1
Next
ReDim maxcolsize(nbcol)
header_font = oDataGrid.TableStyles(tabname).HeaderFont
' la taille max de chaque colonne est initialisée avec la taille des entêtes
nbcol = 0
For Each i In GridColumnStyleResizedIndexes
tmp_sz = g.MeasureString(oDataGrid.TableStyles(tabname).GridColumnStyles(i).HeaderText, _
header_font)
maxcolsize(nbcol) = tmp_sz.Width * (1 + (2 / tmp_sz.Width)) ' formule à la con ...
nbcol += 1
Next
' on tient enfin compte des données contenues dans la source de données liée au Datagrid
For Each row In dt.Rows
nbcol = 0
If (Not (row.RowState = DataRowState.Deleted)) AndAlso (Not (row(0) Is DBNull.Value)) Then
v = row.ItemArray
i = 0
For Each o In v
If [Array].IndexOf(ColumnResizedIndexes, i) <> -1 Then
Select Case [Type].GetTypeCode(o.GetType())
Case TypeCode.String
s = o
Case TypeCode.DateTime
s = CStr(o) ' conversion DateTime vers String, en enlevant l'heure
Case Else
s = o.ToString
End Select
col_font = oDataGrid.Font
tmp_sz = g.MeasureString(s, col_font)
sg = tmp_sz.Width * (1 + (2 / tmp_sz.Width)) ' formule à la con ...
If maxcolsize(nbcol) < sg Then
maxcolsize(nbcol) = sg
End If
nbcol += 1
End If
i = i + 1
Next
End If
Next
nbcol = 0
For Each i In GridColumnStyleResizedIndexes
oDataGrid.TableStyles(tabname).GridColumnStyles(i).Width = maxcolsize(nbcol)
nbcol += 1
Next
End Sub
Conclusion
Le redimensionnement ne fonctionne pas forcément bien si vous avez créé des ColumnStyle personnalisé, avec ComboBox, ou DateTimePicker, etc....
Historique
- 30 novembre 2006 13:31:40 :
- mise à jour de l'apercu
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Datagrid column par column [ par kempo ]
Bonjour, J'ai 5 arrays differents que je souhaiterai afficher dans chaque colonne! J'ai donc: textcol As New DataGridTextColumn() Mais je ne trouv
type incompatible, datagrid [ par tajajtsidi ]
bonjour, j'espère que vous êtes en bonne santé. bon, j'explique mon pb. j'ai chargé une datagrid a partir d'une base de donnée. cette ligne provoque
datagrid et les champs textbox [ par almous ]
bonjour à tous je developpe une application qui gere un parc de taxi.donc mon probleme est que dans la formpersonnel j'aimerai que si je click dans le
ma requete n'affiche aucun resultat dans datagrid [ par karihadi ]
bonjour j'aimerai afficher les pièces vendues avant une date que l'utilisateur peut choisir à l'aide d'un calendar dans un textbox et voici la requete
Affichage Dans Datagrid View [ par Labon90 ]
Bonjour à tous, Je suis en VB 2010... J'utilse un DataTable que je remplis avec une requête SQL. Je me sert de ce DataTable pour emplir un DatagridV
erreur sous vb6 [ par superfri ]
bjr à tous, j'ai mon application conçu sous vb6 avec l'objet ADODC et les datagrid, qui tourne bien sous xp, mais sous seven ou sous vista j'ai cette
Problème avec le DataGrid [ par Calade ]
Bonjour, Je rencontre un problème récurrent avec le contrôle DataGrid. Pour que l'on soit bien d'accord il s'agit dans la liste des composants de l'I
dimentionnement du controle datagrid [ par saadouli7 ]
bonjours, je travaille avec vb.net et j'ai un problème concernant le dimentionnement du datagrid. je veut que le contrôle datagrid redimentionne selon
Afficher le résultat d'une procédure stockée avec parametre dans datagrid [ par abdweb ]
Bonjours a tous, je developpe une application sous [b]VB6[/b] en utilisant sql server 2005. Peut on m'aider à executer une procedure stockée avec p
Datagrid [ par touraco510 ]
Bonjour à tous j'ai besoin d'aide et voici ma préoccupation: j'ai fait une application de gestion des journaliers dans une entreprise X avec VB 6.0.
|
Derniers Blogs
ASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHEASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHE par fathi
Tout le monde est unanime pour dire que la programmation multi-thread et asynchrone est en train de devenir un sujet incontournable. Beaucoup de choses sont arrivées avec le framework 4 pour le code parallèle (TPL, PLinq,.) et bientôt, on va avoir l...
Cliquez pour lire la suite de l'article par fathi PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|