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 :

Impression contenu ListView


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 71

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 304
    Par défaut Impression contenu ListView
    Bonjour
    D'après le cours de J.M Rabillaud j'ai créé un form avec une ListView
    Le contenu de la liste est correct dans le form, mais si je veux l'imprimer j'ai le message suivant "Le document ne contient aucune page"
    Voici le code que j'ai utilisé

    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
    Imports System
    Imports System.Data
    Imports System.Data.OleDb
    Imports Microsoft.VisualBasic
    Imports System.Drawing.Printing
     
    Public Class Form1
     
        Inherits System.Windows.Forms.Form
        Class ListViewItemComparer
            Implements IComparer
            Private col As Integer
            Private sortOrder As SortOrder
     
            Public Sub New()
                col = 0
                sortOrder = Windows.Forms.SortOrder.Ascending
            End Sub
     
            Public Sub New(ByVal column As Integer)
                col = column
                sortOrder = Windows.Forms.SortOrder.Ascending
            End Sub
     
            Public Sub New(ByVal column As Integer, ByVal s As SortOrder)
                col = column
                sortOrder = s
            End Sub
     
            Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
                If sortOrder = Windows.Forms.SortOrder.Ascending Then
                    Return String.Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
                Else
                    Return String.Compare(CType(y, ListViewItem).SubItems(col).Text, CType(x, ListViewItem).SubItems(col).Text)
                End If
     
            End Function
     
        End Class
        Public Function Init_SansPhoto()
            ListViewActeurs.Items.Clear()
            ListViewActeurs.Columns.Clear()
            Me.ListViewActeurs.ListViewItemSorter = Nothing
            Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & _
                         "C:\Access\DvdData.mdb")
            Dim Mycommand As OleDbCommand = MyConnexion.CreateCommand()
     
            Mycommand.CommandText = "SELECT N°,Code FROM Acteurs WHERE AbscencePhoto = True ORDER BY Code"
     
            MyConnexion.Open()
     
            Dim myReader As OleDbDataReader = Mycommand.ExecuteReader()
            ListViewActeurs.View = View.Details
            With ListViewActeurs.Columns
                .Add("N°", 45, HorizontalAlignment.Left)
                .Add("Acteurs et actrices", 320, HorizontalAlignment.Left)
            End With
     
     
            Do While myReader.Read()
                Dim _MyListViewItem As ListViewItem = New ListViewItem(Format(myReader.GetValue(0), "0000"))
                With _MyListViewItem
                    .SubItems.Add(myReader.GetValue(1).ToString)
                End With
                ListViewActeurs.Items.Add(_MyListViewItem)
            Loop
            myReader.Close()
            MyConnexion.Close()
            Return Nothing
        End Function
     
        Private Sub ListView_ColumnClick(ByVal sender As System.Object, _
       ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListViewActeurs.ColumnClick
            If Me.ListViewActeurs.Sorting = SortOrder.Ascending Then
                Me.ListViewActeurs.Sorting = SortOrder.Descending
            Else
                Me.ListViewActeurs.Sorting = SortOrder.Ascending
            End If
            Me.ListViewActeurs.ListViewItemSorter = New ListViewItemComparer(e.Column, Me.ListViewActeurs.Sorting)
        End Sub
     
        Private Sub BtnFermer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnFermer.Click
            Close()
        End Sub
     
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Init_SansPhoto()
        End Sub
     
        Private Sub BtnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPrint.Click
            Me.PrintDocument1.DefaultPageSettings.Margins = New Margins(50, 50, 50, 50)
            Me.PrintDocument1.OriginAtMargins = True
            Me.PrintPreviewDialog1.ShowDialog()
        End Sub
     
        Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            Dim rec As New Rectangle(New Point(10, 10), Me.ListViewActeurs.PreferredSize)
            Dim monimage As New Bitmap(rec.Width, rec.Height)
            Me.ListViewActeurs.DrawToBitmap(monimage, rec)
            e.Graphics.DrawImage(monimage, New Point(10, 10))
        End Sub
    End Class
    Quelqu'un aurait-il une idée pour me secourir ?
    Merci d'avance

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Par défaut
    Bonjour

    Tu a oublié d'attibué un document a ton PrintPreviewDialog .
    Il suffit de rajouter , avant de afficher le dialog :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.PrintPreviewDialog1.Document = PrintDocument1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Me.PrintDocument1.DefaultPageSettings.Margins = New Margins(50, 50, 50, 50)
            Me.PrintDocument1.OriginAtMargins = True
    Me.PrintPreviewDialog1.Document = PrintDocument1
        Me.PrintPreviewDialog1.ShowDialog()
    Bon courage

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Par défaut
    Bonjour

    Voila un astuce pour imprimer le contenu texte de listView sans passer par capture :
    On a besoins des controles
    ListView1 , PrintPreviewDialog1 , PrintDocument1 et Button1
    aussi il faut importer la classe d'impression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Drawing.Printing
    'Dans l'evenement_click du Button1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            PrintDocument1.DefaultPageSettings.Margins = New Margins(50, 10, 50, 50) 'definir les marges
            PrintDocument1.OriginAtMargins = True 'appliquer les marges définies
            PrintDocument1.DefaultPageSettings.Landscape = False 'mode portret
            PrintPreviewDialog1.Document = PrintDocument1 'Chargement du document dans l'apperçu
            PrintPreviewDialog1.ShowDialog() 'Affichage du dialogue
        End Sub
    'Dans l'evenement d'impression du PrintDocument1 :

    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
    Private Sub PrintDocument1_PrintPage(sender As Object, e As PrintPageEventArgs) Handles PrintDocument1.PrintPage
            'Declaration d'une variable "statique" pour pouvoir parcourir le listView en cas des plusieurs pages
            Static pos As Int32 = 0
            Dim HauteurTexte As Single = e.Graphics.MeasureString("X", Me.ListView1.Font).Height 'Recuperation d'hauteur du texte
            Dim LignePerPage As Int32 = CInt(e.MarginBounds.Height / HauteurTexte) 'Calcul de nombre des lignes par page
            Dim XPos, YPos As Single 'Les positions temporaires
            YPos = HauteurTexte
            XPos = 0
            'Imprime la liste
            For cmptLig As Int32 = 0 To ListView1.Items.Count - 1
                If cmptLig > LignePerPage Then
                    YPos = 0
                    e.HasMorePages = True
                    Exit For
                ElseIf pos > ListView1.Items.Count - 1 Then
                    'travail termine
                    e.HasMorePages = False
                    pos = 0
                    Exit For
                End If
                For clm As Int32 = 0 To ListView1.Columns.Count - 1
                    e.Graphics.DrawString(ListView1.Items(pos).SubItems(clm).Text, ListView1.Font, Brushes.Black, XPos, YPos) ' New Font("Arial", 15, FontStyle.Regular)
                    XPos += ListView1.Columns(clm).Width 'la position horisontale
                Next
                YPos += HauteurTexte
                XPos = 0
                pos += 1
            Next
            If e.HasMorePages = False Then pos = 0 'Si il n'y a que une page on met la variable statique a 0
        End Sub
    'Attention a n'a jamais utiliser une variable globale dans le PrintPage evenement = le contenu du listView ne sera pas imprimé malgre l'apercu avant l'impression

Discussions similaires

  1. Impression contenu page web
    Par piero53 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 09/06/2009, 21h27
  2. affichage contenu listview dans classeur excel
    Par lekooto dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 01/09/2007, 21h24
  3. [impression] contenu d'un div
    Par bakonu dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/03/2007, 11h50
  4. Imprimer contenu listview
    Par cperichon dans le forum Access
    Réponses: 1
    Dernier message: 02/05/2006, 16h27
  5. impression contenu db de manière formatée
    Par micknic dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 04/10/2004, 11h53

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