Announcement

Collapse
No announcement yet.

Eine Suchabfrage drucken

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Eine Suchabfrage drucken

    Hallo,

    wo finde ich was zum Thema drucken unter VB.net. Möchte eine DB Suchabfrage formatieren und ausdrucken.

    Danke Olaf

  • #2
    Hallo,

    prinzipiell gibt es zwei verschiedene Wege:

    1. Mit den für das Drucken zuständigen Klassen aus dem .NET Framework arbeiten (siehe Klasse <b>PrintDocument</b> aus dem Namespace <i>System.Drawing.Printing</i>) <br> <br>
    2. Mit einem ReportGenerator wie zum Beispiel den in VS.NET integrierten <i>Crystal Report</i> arbeiten, der auch ein bereits mit den Datensätzen gefülltes DataSet als Report-Quelle akzeptiert.

    Ein Minimal-Beispiel für den 1. Weg könnte so aussehen:
    <pre>
    Imports System.Drawing.Printing
    <br>
    ...
    <br>
    Private WithEvents aPD As PrintDocument
    <br>
    Private Sub aPD_BeginPrint(ByVal sender As Object, ByVal e As PrintEventArgs) Handles aPD.BeginPrint
    ListBox1.Items.Add("BeginPrint....")
    End Sub
    <br>
    Private Sub aPD_EndPrint(ByVal sender As Object, ByVal e As PrintEventArgs) Handles aPD.EndPrint
    ListBox1.Items.Add("...EndPrint")
    End Sub
    <br>
    Private Sub aPD_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs) Handles aPD.PrintPage
    Dim aPrintFont As New Font("Arial", 11)
    Dim iLineHeight As Single = aPrintFont.GetHeight(e.Graphics)
    Dim iX As Single = e.MarginBounds.Left
    Dim iY As Single = e.MarginBounds.Top
    iPageNum += 1
    ListBox1.Items.Add(" Drucke Seite " + iPageNum.ToString())
    While ((iY + iLineHeight) < e.MarginBounds.Bottom And iOffset < iArraySize)
    e.Graphics.DrawString(sData(iOffset), aPrintFont, Brushes.Black, iX, iY)
    iOffset += 1
    iY += iLineHeight
    End While
    If iOffset < iArraySize Then
    e.HasMorePages = True
    End If
    End Sub
    <br>
    Private iPageNum As Integer
    Private iOffset As Integer
    Private sData(100) As String
    Private iArraySize As Integer
    <br>
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim iIdx As Integer
    For iIdx = 0 To 100
    sData(iIdx) = String.Format("Das ist die zu druckende Zeile {0:00000}.", iIdx + 1)
    Next
    aPD = New PrintDocument()
    iPageNum = 0
    iOffset = 0
    iArraySize = sData.GetUpperBound(0)
    aPD.Print()
    End Sub
    </pre>

    Mit .NET steht ein Ereignisunterstütztes Printing-Model zur Verfügung. Immer dann, wenn eine Seite gedruckt werden soll, löst .NET das Ereignis <b>PrintDocument.PagePrint</b> aus,wobei der Parameter vom Typ <i>PrintPageEventArgs</i> die Daten zum Drucker liefert
    &#10

    Comment


    • #3
      Hallo Andreas,

      vielen Dank für die Hilfe.

      Ich wollte aus einer DB verschiedene Daten in ein DataGrid einlesen und dieses formatiert zum drucken anbieten. Geht das überhaupt mit einem DataGrid. Beim auslesen aus einem Textfeld kann ich doch sowas in der Art angeben: txtText.font... oder txtLines.Lines(). Nur ich finde nix zu DataGrid. Gibt es vielleicht eine Buchempfehlung. Unter VB6 war das irgendwie einfacher.

      Danke für die Hilfe.
      Ola

      Comment

      Working...
      X