OVH Cloud OVH Cloud

Bloquer élargir colonne Datagrid

4 réponses
Avatar
Annie L.
J'aimerais savoir si on peut bloquer l'élargissement des colonnes d'un
datagrid? Exemple : si mes colonnes de mon datagrid ont comme largeur 125,
j'aimerais pouvoir bloquer ces colonnes pour ne pas qu'un utilisateur modifie
ces largeurs.
Où bien, peut-on agrandir l'entête des colonnes pour écrire la description
de la colonne sur 2 lignes?

4 réponses

Avatar
Annie L.
Pour ce qui est de l'entête des colonnes, il faut ajouter un saut de ligne
dans le titre de la colonne.
Exemple: Dim cs As New DataGridBoolColumn
cd.HeaderText = "coucou" + Chr(10) + "tout le monde"

et augmenter 'Datagrid.HeaderFont.Size' à 18 devrait suffire.
Et cela fonctionne très bien.

Il reste à trouver comment bloquer l'élargissement ou le rapetissement des
colonnes!

Merci!
"Annie L." wrote:

J'aimerais savoir si on peut bloquer l'élargissement des colonnes d'un
datagrid? Exemple : si mes colonnes de mon datagrid ont comme largeur 125,
j'aimerais pouvoir bloquer ces colonnes pour ne pas qu'un utilisateur modifie
ces largeurs.




Où bien, peut-on agrandir l'entête des colonnes pour écrire la description
de la colonne sur 2 lignes?


Avatar
Zoury
Salut Annie! :O)

Tu dois (encore une fois) créer une classe qui hérite du DataGrid..
'***
Option Explicit On

Public Class DataGridEx
Inherits System.Windows.Forms.DataGrid

' message de modifie de curseur
Private Const WM_SETCURSOR As Int32 = &H20

Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)

' Empêche le redimensionnement
' -> parce que le MouseDown est impossible lorsque
' le curseur est situé au dessus de la tite barre de
' séparation de colonne
If (Me.HitTest(e.X, e.Y).Type = HitTestType.ColumnResize) Then
Return
End If

MyBase.OnMouseDown(e)

End Sub

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)

' Empêche le curseur de changer lorsque le curseur
' passe au dessus de la tite barre de
' séparation de colonne
If (m.Msg = WM_SETCURSOR) Then
If (Me.HitTest(Me.PointToClient(Control.MousePosition)).Type HitTestType.ColumnResize) Then
Return
End If
End If

MyBase.WndProc(m)
End Sub

End Class
'***

Note que si tu utilises encore la classe déjà hérité, tu n'as qu'à y ajouté
ces modifications..

--
Cordialement
Yanick
MVP pour Visual Basic
"Annie L." a écrit dans le message de
news:
Pour ce qui est de l'entête des colonnes, il faut ajouter un saut de ligne
dans le titre de la colonne.
Exemple: Dim cs As New DataGridBoolColumn
cd.HeaderText = "coucou" + Chr(10) + "tout le monde"

et augmenter 'Datagrid.HeaderFont.Size' à 18 devrait suffire.
Et cela fonctionne très bien.

Il reste à trouver comment bloquer l'élargissement ou le rapetissement des
colonnes!

Merci!
"Annie L." wrote:

> J'aimerais savoir si on peut bloquer l'élargissement des colonnes d'un
> datagrid? Exemple : si mes colonnes de mon datagrid ont comme largeur


125,
> j'aimerais pouvoir bloquer ces colonnes pour ne pas qu'un utilisateur


modifie
> ces largeurs.


> Où bien, peut-on agrandir l'entête des colonnes pour écrire la


description
> de la colonne sur 2 lignes?


Avatar
Zoury
quelques petits conseils..
cd.HeaderText = "coucou" + Chr(10) + "tout le monde"



1. Les constantes

Utilise vbNewLine au lieu de Chr(10). C'est plus clair, plus rapide (ce
n'est pas une fonction) et de plus Chr(10) n'est pas complet... il faudrait
Chr(13) & Chr(10) pour obtenir un *vrai* retour de chariot Windows.

2.1 Les concaténations "on the fly"

utilise la perluette & pour effectuer une concaténation de chaine de
caractère.
utilise le plus + seulement lorsque tu additionnes des nombres.

Cela t'évitera des problèmes dû à des conversions de types automatiques fait
par VB. De plus, ça fait en sorte que le code parle de lui même... on sait
d'un coup d'oeil qu'il s'agit d'une concaténaiton ou d'une addition.

2.2 Mais personnellement, j'évite ce type de concaténation... Les
concaténations/modifications de chaine sous .NET sous très lente car il faut
*à chaque fois* recréer une toute nouvelle chaine en mémoire. Ce principe
devient très très lourd au fur et à mesure que le chaine grossit...

Donc dans ce cas ci j'utiliserais String.Format() :
'***
cd.HeaderText = String.Format("coucou{0}tout le monde", vbNewLine)
'***
et pour les concaténations plus importante (en quantité), je te recommande
fortement le StringBuilder.

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Annie L.
Quels judicieux conseils!!!!!
Cela fonctionne très bien!
Pour ce qui est de la 'perluette', je l'utilise en tout temps.
L'exemple que j'ai écrit dans ce 'post' a été trouvé sur un site et je n'ai
pas tenu compte du "+".
C'est très intéressant d'avoir des meilleures méthodes de travail pour la
programmation en VB.NET
Comme je vois, j'utilise encore des méthodes de VB6, mais ce n'est pas
évident de trouver les méthodes de Vb6 dans mon code et de les remplacer par
des méthodes VB.NET
Un gros merci!



"Zoury" wrote:

quelques petits conseils..
> cd.HeaderText = "coucou" + Chr(10) + "tout le monde"

1. Les constantes

Utilise vbNewLine au lieu de Chr(10). C'est plus clair, plus rapide (ce
n'est pas une fonction) et de plus Chr(10) n'est pas complet... il faudrait
Chr(13) & Chr(10) pour obtenir un *vrai* retour de chariot Windows.

2.1 Les concaténations "on the fly"

utilise la perluette & pour effectuer une concaténation de chaine de
caractère.
utilise le plus + seulement lorsque tu additionnes des nombres.

Cela t'évitera des problèmes dû à des conversions de types automatiques fait
par VB. De plus, ça fait en sorte que le code parle de lui même... on sait
d'un coup d'oeil qu'il s'agit d'une concaténaiton ou d'une addition.

2.2 Mais personnellement, j'évite ce type de concaténation... Les
concaténations/modifications de chaine sous .NET sous très lente car il faut
*à chaque fois* recréer une toute nouvelle chaine en mémoire. Ce principe
devient très très lourd au fur et à mesure que le chaine grossit...

Donc dans ce cas ci j'utiliserais String.Format() :
'***
cd.HeaderText = String.Format("coucou{0}tout le monde", vbNewLine)
'***
et pour les concaténations plus importante (en quantité), je te recommande
fortement le StringBuilder.

--
Cordialement
Yanick
MVP pour Visual Basic