none
datagridview avec vb2010 RRS feed

  • Question

  • bonjour

    Est -il possible de changer l'orientation de l'écriture dans une celle d'un dategridview je voudrais écrire en vertical pour diminuer la taille des cellules

    merci de votre aide

    lundi 11 janvier 2016 11:51

Réponses

  • Oui cela se fait sur les headers. Voila un exemple trouvé sur les headers en vb:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            If DataGridView1.Columns.Count > 0 Then
                DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
                DataGridView1.ColumnHeadersHeight = 100
            Else
                DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
            End If
            DataGridView1.Columns(0).Width = 20
            
        End Sub
    
        Private Sub dataGridView1_CellPainting(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
            If e.RowIndex = -1 AndAlso e.ColumnIndex = 0 Then
                e.PaintBackground(e.CellBounds, True)
                e.Graphics.TranslateTransform(e.CellBounds.Left, e.CellBounds.Bottom)
                e.Graphics.RotateTransform(270)
                e.Graphics.DrawString(e.FormattedValue, e.CellStyle.Font, Brushes.Black, 5, 5)
                e.Graphics.ResetTransform()
                e.Handled = True
            End If
        End Sub


    Cyrille Precetti
    Bonne Année! Happy New Year!


    lundi 11 janvier 2016 14:27

Toutes les réponses

  • Il y a une solution décrite dans le forum en anglais à propos de WindowsForm...peut être similaire pour VB.net dans les éléments de syntaxe : https://social.msdn.microsoft.com/Forums/windows/en-US/e748d003-e71c-4c0a-93e6-492d54487ef0/datagridview-vertical-text?forum=winformsdatacontrols

    Cyrille Precetti
    Bonne Année! Happy New Year!


    lundi 11 janvier 2016 12:41
  • merci de votre réponse

    je viens de regarder le code  en anglais mais  comment le transcrire pour vb2010 pouvez vous m'aider merci d'avance

    lundi 11 janvier 2016 13:18
  • Voici un exemple avec juste le ListBox sur laquelle vous travailliez plus tôt:

    'Il faut modifier l'Item pour écrire depuis les bords bas gauche... sinon on ne voit pas le résultat'
    e.Graphics.TranslateTransform(e.Bounds.Left, e.Bounds.Bottom)
    'L'élément graphique est tourné'
    e.Graphics.RotateTransform(270)
    
    ' Dessin de l'item en cours avec la Brush définie.'
            e.Graphics.DrawString(ListBox1.Items(e.Index).ToString(),
            e.Font, myBrush, e.Bounds, StringFormat.GenericDefault)

    Voila ce que cela donne:

    Vous noterez que chaque item est écrit sur sa ligne et au delà de la position de l'item précédent. Il faut donc gérer la hauteur des lignes pour donner la place d'écrire verticalement.

    Pour un datagridview c'est la même chose, vous gérez l'événement CellPainting (Drawitem pour ListBox), voyez l'exemple sur msdn: https://msdn.microsoft.com/fr-FR/library/system.windows.forms.datagridview.cellpainting%28v=vs.110%29.aspx


    Cyrille Precetti
    Bonne Année! Happy New Year!

    lundi 11 janvier 2016 13:50
  • merci beaucoup je vais le mettre en action est ce que cela peut se faire pour les têtes de colonnes?
    lundi 11 janvier 2016 14:21
  • Oui cela se fait sur les headers. Voila un exemple trouvé sur les headers en vb:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            If DataGridView1.Columns.Count > 0 Then
                DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
                DataGridView1.ColumnHeadersHeight = 100
            Else
                DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
            End If
            DataGridView1.Columns(0).Width = 20
            
        End Sub
    
        Private Sub dataGridView1_CellPainting(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
            If e.RowIndex = -1 AndAlso e.ColumnIndex = 0 Then
                e.PaintBackground(e.CellBounds, True)
                e.Graphics.TranslateTransform(e.CellBounds.Left, e.CellBounds.Bottom)
                e.Graphics.RotateTransform(270)
                e.Graphics.DrawString(e.FormattedValue, e.CellStyle.Font, Brushes.Black, 5, 5)
                e.Graphics.ResetTransform()
                e.Handled = True
            End If
        End Sub


    Cyrille Precetti
    Bonne Année! Happy New Year!


    lundi 11 janvier 2016 14:27
  • merci beaucoup j'ai réussi à le faire bravo!!! je le marque comme réponse
    mardi 12 janvier 2016 08:13