IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème au code d’impression du DataGridView


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    chargé d'affaire commercial
    Inscrit en
    Mai 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : chargé d'affaire commercial
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 45
    Points : 55
    Points
    55
    Par défaut Problème au code d’impression du DataGridView
    Bonjour pour imprimer une DatagridView j ai mis le code ci dessous à chaque fois que je l'exécute il m'affiche ce message :
    "System.ArgumentOutOfRangeException*: 'L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
    Nom du paramètre*: index'"
    j'ai essayé avec Try Catch il a fonctionné mais il prend juste la première ligne de tableau
    sachant qu'il indique que la faute dans la ligne 48 du code Veuillez m'aider SVP c'est urgent
    Ligne 48 :
    MyGr.DrawString(Me.DataGridView1.Item(cmptCol + 1, cmptLigne).Value.ToString, policeT, Brushes.Black, New RectangleF(PosCol(cmptCol), YPos, CInt(LargCol(cmptCol)), TailleChaine.Height))

    Veuillez m'aider SVP c'est urgent


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
            Dim policeS As New Font("Arial", 10)
                Dim policeT As New Font("Arial", 10)
                Dim policeG As New Font("Arial", 10, FontStyle.Bold)
                Dim XPos, YPos As Single
                Dim Interligne As Single
                Dim ChaineImpr As String = ""
                Dim TailleChaine As SizeF
                Using MyGr As Graphics = e.Graphics
                    XPos = e.MarginBounds.Width / 2.0F
                    YPos = 0
                    Dim LargCol(3), PosCol(3) As Single
                    LargCol(3) = MyGr.MeasureString("Prix Unitaire HT", policeS).Width
                    LargCol(2) = MyGr.MeasureString("Quantité", policeS).Width
                    LargCol(1) = MyGr.MeasureString("Désignation", policeS).Width
                    LargCol(0) = e.MarginBounds.Width / 2.0F - LargCol(1) - LargCol(2) - LargCol(3)
                    For cmpt As Int32 = 1 To 3
                        PosCol(cmpt) = PosCol(cmpt - 1) + LargCol(cmpt - 1)
                    Next
                    Dim FormatTitre As New StringFormat
                    FormatTitre.Alignment = StringAlignment.Center
                    FormatTitre.LineAlignment = StringAlignment.Center
                    Dim FormatCase As New StringFormat
     
                    ' Impression Des Titres 
     
                    MyGr.FillRectangle(Brushes.Blue, XPos, YPos, e.MarginBounds.Width / 2.0F, Interligne)
                    MyGr.DrawString("Code Article", policeS, Brushes.White, New RectangleF(PosCol(0), YPos, LargCol(0), Interligne), FormatTitre)
                    MyGr.DrawRectangle(Pens.Black, PosCol(0), YPos, LargCol(0), Interligne)
                    MyGr.DrawString("Désignation", policeS, Brushes.White, New RectangleF(PosCol(1), YPos, LargCol(1), Interligne), FormatTitre)
                    MyGr.DrawRectangle(Pens.Black, PosCol(1), YPos, LargCol(1), Interligne)
                    MyGr.DrawString("Quantité", policeS, Brushes.White, New RectangleF(PosCol(2), YPos, LargCol(2), Interligne), FormatTitre)
                    MyGr.DrawRectangle(Pens.Black, PosCol(2), YPos, LargCol(2), Interligne)
                    MyGr.DrawString("Prix Unitaire HT", policeS, Brushes.White, New RectangleF(PosCol(3), YPos, LargCol(3), Interligne), FormatTitre)
                    MyGr.DrawRectangle(Pens.Black, PosCol(3), YPos, LargCol(3), Interligne)
                    YPos += Interligne
     
                For cmptLigne As Int32 = 0 To Me.DataGridView1.RowCount - 1
                    For cmptCol As Int32 = 0 To 3
     
                        If cmptCol = 0 Then
                          ChaineImpr = Me.DataGridView1.Item(cmptCol + 1, cmptLigne).Value.ToString
                           TailleChaine = MyGr.MeasureString(ChaineImpr, policeT, CInt(LargCol(0)))
                            MyGr.DrawString(ChaineImpr, policeT, Brushes.Black, New RectangleF(PosCol(0), YPos, CInt(LargCol(0)), TailleChaine.Height))
                            MyGr.DrawRectangle(Pens.Black, PosCol(0), YPos, CInt(LargCol(0)), TailleChaine.Height)
                        Else
                            MyGr.DrawString(Me.DataGridView1.Item(cmptCol + 1, cmptLigne).Value.ToString, policeT, Brushes.Black, New RectangleF(PosCol(cmptCol), YPos, CInt(LargCol(cmptCol)), TailleChaine.Height))
                            MyGr.DrawRectangle(Pens.Black, PosCol(cmptCol), YPos, CInt(LargCol(cmptCol)), TailleChaine.Height)
     
                        End If
                    Next
                    YPos += TailleChaine.Height
                Next
            End Using

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Le problème se situe probablment au niveia de ces lignes de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                For cmptLigne As Int32 = 0 To Me.DataGridView1.RowCount - 1
                    For cmptCol As Int32 = 0 To 3
    Je suppose que ton DGV possède 4 colonnes puisque que tu les comptes de 0 à 3.
    Par contre pour les lignes, peut-être dois-tu les compter de 0 à RowCount - 2 (au lieu de -1).
    La raison est la suivante : par défaut, un DGV comporte un ligne vierge en dernière position. Dans ce cas, la dernière ligne donne une ligne vide en sortie dans le meilleur des cas, ou un erreur si tu tentes d'effectuer des traitements (ex. calculs). Aussi, pour éviter cette ligne vierge, il faut limiter la boucle à RowCount - 2.
    Cette ligne vierge n'existe pas si on règle la propriété : AllowUserToAddRows = False.

    Mais l'erreur peut être ailleurs. Tu as notamment un tableau LargCol() qui est dépendant des boucles (au moins de celle des colonnes). Il te faudrait exécuter en pas à pas (F10) avec LargCol et cmptCol en espions pour vérifier leurs différentes valeurs avant l'erreur.

    Bon travail,


Discussions similaires

  1. Réponses: 20
    Dernier message: 23/07/2012, 14h32
  2. Problème de code svp
    Par momoh dans le forum VB.NET
    Réponses: 0
    Dernier message: 17/02/2009, 14h31
  3. j'ai un probléme avc un code vb.net aider moi svp
    Par dv-2008 dans le forum VB.NET
    Réponses: 12
    Dernier message: 29/01/2008, 09h20
  4. Urgent svp parametre variable de executeQuery
    Par debdev dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/08/2005, 11h09
  5. [HVMenu] problème dans les pages ASPX (urgent svp)
    Par hatembr dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/01/2005, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo