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!