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 :

datagridview: ne pas imprimer les lignes masquées


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 92
    Points : 63
    Points
    63
    Par défaut datagridview: ne pas imprimer les lignes masquées
    bonjour à tous!
    alors, je cale un peu parce que je n'arrive pas à faire en sorte de ne pas imprimer les lignes masquées de mon datagridview...
    lorsque je l'imprime, j'ai tout simplement un blanc à la place des lignes masquées (par exemple, ligne, blanc, ligne, ligne...)
    hors j'aimerai pouvoir rassembler toutes les lignes non masquées...
    j'ai essayé de le faire via un sort de mon bindingsource histoire d'avoir les vides à la fin mais cela ne fonctionne pas (les lignes sont masquées selon si une cellule est vide ou non)(et de toute façon, il y a un trop grand risque pour qu'il me sorte X feuilles blanches contenant les lignes masquées lors de l'impression)

    voici mon code pour l'impression, j'aimerai faire un style if.... then continue for comme il y a pour les colonnes...
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
     Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    
            Static oColumnLefts As New ArrayList
            Static oColumnWidths As New ArrayList
            Static oColumnTypes As New ArrayList
            Static nHeight As Int16
    
            Dim nWidth, i, nRowsPerPage As Int16
            Dim nTop As Int16 = e.MarginBounds.Top
            Dim nLeft As Int16 = e.MarginBounds.Left
    
            If nPageNo = 1 Then
    
                For Each oColumn As DataGridViewColumn In Année_2011DataGridView.Columns
                    '--------------'Saute colonne.Ne pas imprimer.(deduite de largeur du string HeaderTex) ---------------------
                    If Not (oColumn.Visible) Then Continue For
                    nWidth = CType(Math.Floor(oColumn.Width / nTotalWidth * nTotalWidth * (e.MarginBounds.Width / nTotalWidth)), Int16)
    
                    nHeight = e.Graphics.MeasureString(oColumn.HeaderText, oColumn.InheritedStyle.Font, nWidth).Height + 11
    
                    oColumnLefts.Add(nLeft)
                    oColumnWidths.Add(nWidth)
                    oColumnTypes.Add(oColumn.GetType)
                    nLeft += nWidth
    
                Next
    
            End If
           
    
    
    
            For Each row As DataGridViewRow In Année_2011DataGridView.Rows
    
    
                Do While nRowPos < Année_2011DataGridView.Rows.Count - 1
    
    
    
    
    
    '########### ci-dessous un essai...
                    If row.Visible = True Then
                        Dim oRow As DataGridViewRow = Année_2011DataGridView.Rows(nRowPos)
                        If nTop + nHeight >= e.MarginBounds.Height + e.MarginBounds.Top Then
    
                            DrawFooter(e, nRowsPerPage)
    
                            NewPage = True
                            nPageNo += 1
                            e.HasMorePages = True
                            Exit Sub
    
                        Else
    
                            If NewPage Then
    
                                ' Draw Header
                                e.Graphics.DrawString(Header, New Font(Année_2011DataGridView.Font, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top - e.Graphics.MeasureString(Header, New Font(Année_2011DataGridView.Font, FontStyle.Bold), e.MarginBounds.Width).Height - 13)
    
                                ' Draw Columns
                                nTop = e.MarginBounds.Top
                                i = 0
                                For Each oColumn As DataGridViewColumn In Année_2011DataGridView.Columns
                                    '--------------'Saute en-entete colonne .Ne pas imprimer ---------------------
                                    If Not (oColumn.Visible) Then Continue For
                                    e.Graphics.FillRectangle(New SolidBrush(Drawing.Color.LightGray), New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))
                                    e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))
                                    e.Graphics.DrawString(oColumn.HeaderText, oColumn.InheritedStyle.Font, New SolidBrush(oColumn.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), nTop, oColumnWidths(i), nHeight), oStringFormat)
                                    i += 1
    
                                Next
                                NewPage = False
    
                            End If
    
                            nTop += nHeight
                            i = 0
                            For Each oCell As DataGridViewCell In oRow.Cells
                                '--------------'Saute cellule .Ne pas imprimer---------------------
                                If Not (oCell.Visible) Then Continue For 'Saute cellule .Ne pas imprimer
                                If oColumnTypes(i) Is GetType(DataGridViewTextBoxColumn) OrElse oColumnTypes(i) Is GetType(DataGridViewLinkColumn) Then
    
                                    e.Graphics.DrawString(oCell.Value.ToString, oCell.InheritedStyle.Font, New SolidBrush(oCell.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), nTop, oColumnWidths(i), nHeight), oStringFormat)
    
                                ElseIf oColumnTypes(i) Is GetType(DataGridViewButtonColumn) Then
    
                                    oButton.Text = oCell.Value.ToString
                                    oButton.Size = New Size(oColumnWidths(i), nHeight)
                                    Dim oBitmap As New Bitmap(oButton.Width, oButton.Height)
                                    oButton.DrawToBitmap(oBitmap, New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))
                                    e.Graphics.DrawImage(oBitmap, New Point(oColumnLefts(i), nTop))
    
                                ElseIf oColumnTypes(i) Is GetType(DataGridViewCheckBoxColumn) Then
    
                                    oCheckbox.Size = New Size(14, 14)
                                    oCheckbox.Checked = CType(oCell.Value, Boolean)
                                    Dim oBitmap As New Bitmap(oColumnWidths(i), nHeight)
                                    Dim oTempGraphics As Graphics = Graphics.FromImage(oBitmap)
                                    oTempGraphics.FillRectangle(Brushes.White, New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))
                                    oCheckbox.DrawToBitmap(oBitmap, New Rectangle(CType((oBitmap.Width - oCheckbox.Width) / 2, Int32), CType((oBitmap.Height - oCheckbox.Height) / 2, Int32), oCheckbox.Width, oCheckbox.Height))
                                    e.Graphics.DrawImage(oBitmap, New Point(oColumnLefts(i), nTop))
    
                                ElseIf oColumnTypes(i) Is GetType(DataGridViewComboBoxColumn) Then
    
                                    oComboBox.Size = New Size(oColumnWidths(i), nHeight)
                                    Dim oBitmap As New Bitmap(oComboBox.Width, oComboBox.Height)
                                    oComboBox.DrawToBitmap(oBitmap, New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))
                                    e.Graphics.DrawImage(oBitmap, New Point(oColumnLefts(i), nTop))
                                    e.Graphics.DrawString(oCell.Value.ToString, oCell.InheritedStyle.Font, New SolidBrush(oCell.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i) + 1, nTop, oColumnWidths(i) - 16, nHeight), oStringFormatComboBox)
    
                                ElseIf oColumnTypes(i) Is GetType(DataGridViewImageColumn) Then
    
                                    Dim oCellSize As Rectangle = New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight)
                                    Dim oImageSize As Size = CType(oCell.Value, Image).Size
                                    e.Graphics.DrawImage(oCell.Value, New Rectangle(oColumnLefts(i) + CType(((oCellSize.Width - oImageSize.Width) / 2), Int32), nTop + CType(((oCellSize.Height - oImageSize.Height) / 2), Int32), CType(oCell.Value, Image).Width, CType(oCell.Value, Image).Height))
    
                                End If
    
                                e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))
    
                                i += 1
    
                            Next
    
                        End If
    
                        nRowPos += 1
                        nRowsPerPage += 1
    
    
    
    
    
                    ElseIf row.Visible = False Then
    
    
    
                    End If
    
    
                Loop
    
    
    
            Next
    
    
            DrawFooter(e, nRowsPerPage)
    
            e.HasMorePages = False
    
        End Sub
    merci d'avance à vous tous!

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 92
    Points : 63
    Points
    63
    Par défaut
    vous pouvez laisser tomber, j'ai fait un autre datatable avec requete sql si telle cellule <> 0
    et je fais l'impression depuis un datagridview lié à ce datatable

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PAO]Ne pas imprimer les pages blanches
    Par sicnarf dans le forum Word
    Réponses: 1
    Dernier message: 08/06/2007, 12h57
  2. ne pas afficher les lignes Vides
    Par k-eisti dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/05/2007, 18h02
  3. [CSV] read_csv (ne pas lire les ligne vide)
    Par gpsevasion dans le forum Langage
    Réponses: 4
    Dernier message: 28/01/2007, 14h53
  4. Ne pas imprimer les articles avec stock zéro
    Par 810mcu dans le forum Bases de données
    Réponses: 10
    Dernier message: 23/12/2005, 12h15
  5. Réponses: 9
    Dernier message: 15/12/2005, 09h59

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