Πώς εκτυπώνουμε μία λίστα εγγραφών από μία Access database (γενικός τρόπος)

Σχετικά έγγραφα
Πώς εκτυπώνουμε μία λίστα από εγγραφές μίας Access database

Γράψιμο και Διάβασμα σε φύλλο του Excel

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

ΣΧΕΣΕΙΣ στην Northwind

Εφαρμοσμένη Πληροφορική ΙΙ (Εργ.) Visual Basic 2010 Εργαστήριο 6 ο

1. ΕΛΕΓΧΟΙ ΕΓΚΥΡΟΤΗΤΑΣ ΣΕ ΜΙΑ ΦΟΡΜΑ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Πτυχιακή Εργασία των Σπουδαστών: Σταμέλλος Απόστολος Κυμπάρης Κωνσταντίνος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

Threads. Components. (Download File My.Computer.Network.DownloadFile(" files/list.txt", "C:\Temp\list.

Άσκηση 1 (α) Να διατυπώσετε την πιο κάτω λογική έκφραση στη Visual Basic κάνοντας χρήση μεταβλητών:

ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΜΑΪΟΥ-ΙΟΥΝΙΟΥ 2015

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Μπίρμπο Μπλένταρ & Τζούμπα Πηνελόπη

ΛΥΚΕΙΟ ΣΟΛΕΑΣ Σχολική χρονιά

ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΙΟΥΝΙΟΥ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΟΔΗΓΙΕΣ ΔΗΜΙΟΥΡΓΙΑΣ ΕΦΑΡΜΟΓΗΣ ΔΙΑΧΕΙΡΙΣΗΣ ΑΜΕΣΟΥ ΑΡΧΕΙΟΥ ΣΕ ΠΕΡΙΒΑΛΛΟΝ VISUAL STUDIO NET

Τα αντικείμενα ή Χειριστήρια και οι βασικές ιδιότητες τους (properties)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Ε Έκδοση 1 / ΟΔΗΓΙΕΣ (ΗΛΕΚΤΡΟΝΙΚΗΣ) ΜΟΡΦΟΠΟΙΗΣΗΣ ΚΑΝΟΝΙΣΤΙΚΩΝ ΚΕΙΜΕΝΩΝ 01 ΓΕΝΙΚΑ 01 ΓΕΝΙΚΕΣ ΟΔΗΓΙΕΣ

4. Επιλογή και Επανάληψη

Γραφικά υπολογιστών Εργαστήριο 1 Εισαγωγή στην Python

Εγχειρίδιο χρήσης Print2PDF σελ. 1 από 32

Τεχνολογίες Διαδικτύου (Εξασκηθείτε στην HTML)

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

Δομές Δεδομένων & Αλγόριθμοι

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

Διδάσκων: Παναγιώτης Ανδρέου

Πίνακας Περιεχομένων. 1. Locals Window & BreakPoints

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Υπολογιστικά Συστήματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Οδηγίες Συγγραφής Εργασιών για το 7 ο Διεθνές Συνέδριο για την Έρευνα των Μεταφορών

ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2014

ΕΠΕΞΕΡΓΑΣΙΑ ΚΕΙΜΕΝΟΥ. Κειμενογράφος WORD

Ο ΗΓΙΕΣ DOCUMENT DESIGNER

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

Εισαγωγή στον Προγραμματισμό

Αντικειμενοστρεφής Προγραμματισμός

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Δομές ελέγχου ροής προγράμματος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Πρακτικές οδηγίες για την Επεξεργασία Κειμένου

Δομές Δεδομένων (Data Structures)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο

Πτυχιακή Εργασία. Θέµα: Υλοποίηση ιαδικτυακής Εφαρµογής (Βάση εδοµένων Συγγραµµάτων του τµήµατος Πληροφορικής Α.Π.Θ.)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Περιεχόμενα. Γαβαλάς Δαμιανός

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

Αρχεία Ένα αρχείο αποτελείται από μία σειρά ομοειδών δεδομένων που ονομάζονται λογικές εγγραφές (logical record)

ΛΥΚΕΙΟ ΑΓΙΟΥ ΝΕΟΦΥΤΟΥ ΣΧΟΛΙΚΗ ΧΡΟΝΙΑ ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΙΟΥΝΙΟΥ 2011

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Υπολογιστικά Συστήματα

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

ΣΕΜΙΝΑΡΙΟ JAVA. 2 η ιάλεξη

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Οδηγίες Συγγραφής Εργασιών για το 6 ο Πανελλήνιο Συνέδριο Οδικής Ασφάλειας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΛΥΚΕΙΟ ΠΑΡΑΛΙΜΝΙΟΥ ΣΧΟΛΙΚΗ ΧΡΟΝΙΑ: ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΜΑΪΟΥ-ΙΟΥΝΙΟΥ ΜΑΘΗΜΑ: Πληροφορική Κατεύθυνσης ΗΜΕΡΟΜΗΝΙΑ: 10/06/2014

ΕΠΛ 012. JavaScripts

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Συγκρίσιμα Αντικείμενα (comparable)

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

3 ο Εργαστήριο Μεταβλητές, Τελεστές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Τ.Ε.Ι. ΛΑΜΙΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΝΙΚΗΣ

Οντοκεντρικός Προγραμματισμός

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

Το υπολογιστικό φύλλο (Excel)

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

5. MΑΚΡΟΕΝΤΟΛΕΣ. Η δηµιουργία Μακροεντολής γίνεται µε δύο τρόπους :

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

public class ArrayStack implements Stack {

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

2 η Εργαστηριακή Άσκηση

Προγραµµατισµός στην Basic

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

POINTERS, AGGREGATION, COMPOSITION

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΟΔΗΓΙΕΣ ΣΥΓΓΡΑΦΗΣ ΕΡΓΑΣΙΩΝ ΓΙΑ ΤΟ 6 Ο ΣΥΝΕΔΡΙΟ ΓΙΑ ΤΗΝ ΈΡΕΥΝΑ ΣΤΙΣ ΜΕΤΑΦΟΡΕΣ ΣΤΗΝ ΕΛΛΑΔΑ

Συλλογές, Στοίβες και Ουρές

A2. Να γράψετε για κάθε περίπτωση τον αριθμό της πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

Transcript:

Πώς εκτυπώνουμε μία λίστα εγγραφών από μία Access database (γενικός τρόπος) Το προηγούμενο tip αναφέρεται στην εκτύπωση με γραμματοσειρά σταθερού πλάτους. Στο παρόν, θα δούμε έναν γενικό τρόπο εκτύπωσης μίας λίστας εγγραφών με γραμματοσειρά σταθερού ή μεταβλητού πλάτους. Το κλειδί στην όλη υπόθεση είναι να προσδιορίσουμε επακριβώς τα σημεία έναρξης των στηλών στον x-άξονα (οριζόντιο) της σελίδας, με βάση την καθορισμένη μονάδα μέτρησης (pixels ή points). Για το λόγο αυτό, χρησιμοποιούμε έναν πίνακα με όνομα XCoord. Τα πλάτη των στηλών των πεδίων, τα προσδιορίζουμε (σε pixels ή points) σε έναν άλλον πίνακα με όνομα FieldsWidth. Οι δύο πίνακες προφανώς θα έχουν τον ίδιο αριθμό θέσεων. Στον κώδικα, τα σημεία έναρξης των στηλών του XCoord θα υπολογιστούν με βάση τα πλάτη του FieldsWidth. Ως σημείο εκκίνησης της πρώτης στήλης, δηλ. XCoord(0), θα είναι το αριστερό περιθώριο της σελίδας. Να σημειωθεί ότι, αν τα περιεχόμενα μίας στήλης δεν χωρούν στο καθορισμένο πλάτος της τότε αποκόπτονται ώστε να μην "παραβιάσει" το χώρο της επόμενης. Το πλάτος των περιεχομένων ενός πεδίου (στήλης) θα υπολογιστεί με τη μέθοδο MeasureString του αντικειμένου e.graphics. Επίσης, στο παρακάτω παράδειγμα, χρησιμοποιούμε Bold style για την αυτόματη αρίθμηση των εγγραφών, και Italic style για το έτος γέννησης. Imports System.Data.OleDb Imports System.Drawing.Printing Public Class Form1 Inherits System.Windows.Forms.Form Dim strconn$ = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=ΜΑΘΗΤΕΣ.MDB" 'Tα ADO.NET αντικείμενα για την πρόσβαση στη ΒΔ. Dim daadapter As OleDbDataAdapter Dim dsmathites As DataSet Dim MathitesView As DataView

'Το πλήθος των γραμμών (εγγραφών) του View. Dim NbrOfDataRows% 'Ο αριθμός της τρέχουσας εγγραφής εκτύπωσης. Η πρώτη έχει θέση 0. Dim DataRowNbr% = 0 'Για καθορισμό τύπου στοιχισης πεδίου. Private Enum PrintAlignFieldEnum End Enum Left = 1 Center = 2 Right = 3 'Τα fonts για Αυτόματη αρίθμηση, κανονικό, και ειδικά για το έτος γέννησης. 'Αυτά θα οριστούν συγκεκριμένα στο γεγονός BeginPrint του αντικειμένου PrintDocument. Dim FontAA As Font, FontNormal As Font, FontEtosGen As Font 'Τα πλάτη εκτύπωσης (σε pixels) για κάθε στήλη-πεδίο, ως πίνακας. Κι αυτά, καλό είναι να οριστούν στο γεγονός BeginPrint. Dim FieldsWidth%(4) '5 πεδία με το ΑΑ. Θέσεις 0-4. 'Πλάτος για το κενό μεταξύ των στηλών. Dim spacewidth% 'Tα σημεία έναρξης των στηλών στο x-άξονα. Θα υπολογιστούν μετά τους ορισμούς για τα πλάτη. Dim XCoord%(4) '-------------------------------------------------------------------- Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load 'Συνδεση με τη ΒΔ και δημιουργία του DataView για τους μαθητές. daadapter = New OleDbDataAdapter("Select * from ΜΑΘΗΤΕΣ order by ΕΠΩΝΥΜΟ,ΟΝΟΜΑ", strconn) dsmathites = New DataSet() daadapter.fill(dsmathites, "tblmathites") MathitesView = New DataView(dsMathites.Tables("tblMathites")) 'Πάρε το πλήθος των μαθητών. NbrOfDataRows = MathitesView.Count 'Σύνδεσέ το με το Datagrid για εμφάνιση των δεδομένων. DataGrid1.DataSource = MathitesView '------------------------------------------------------------------ 'Προεπισκόπηση εκτύπωσης και εκτύπωση. Private Sub btnprintpreview_click(byval sender As System.Object,_ ByVal e As System.EventArgs) Handles btnprintpreview.click Dim PrintPreview As New PrintPreviewDialog()

PrintPreview.Document = PrintDoc PrintPreview.StartPosition = FormStartPosition.CenterScreen PrintPreview.ShowDialog() '------------------------------------------------------------------ 'Αρχικοποίηση εκτύπωσης. Συνήθως καθορισμός fonts. Private Sub PrintDoc_BeginPrint(ByVal sender As Object,_ ByVal e As System.Drawing.Printing.PrintEventArgs)_ Handles PrintDoc.BeginPrint 'Γραμματοσειρές μεταβλητού πλάτους για τα πεδία. FontAA = New Font("Arial", 10, FontStyle.Bold) FontNormal = New Font("Arial", 9) FontEtosGen = New Font("Arial", 9, FontStyle.Italic) 'Όρισε τα πλάτη των στηλών-πεδίων, σε pixels. FieldsWidth(0) = 100 'Για ΑΑ FieldsWidth(1) = 400 'Για Eπώνυμο FieldsWidth(2) = 300 'Για Όνομα FieldsWidth(3) = 250 'Για Ημερ/νία εγγραφής. FieldsWidth(4) = 150 'Για Έτος γέννησης. 'Πλάτος για το κενό μεταξύ των στηλών. spacewidth = 5 'pixels. '----------------------------------------------------------------- 'Η βασική ρουτίνα για την εκτύπωση. Private Sub PrintDoc_PrintPage(ByVal sender As Object, _ ByVal e As System.Drawing.Printing.PrintPageEventArgs)_ Handles PrintDoc.PrintPage Dim LinesPerPage# = 0 'πόσες γραμμές ανά σελίδα. Dim NbrLine% = 0 'σε ποιά γραμμή στη σελίδα είμαστε. Dim LeftMargin# = e.marginbounds.left 'αριστερό περιθώριο σελίδας. Dim TopMargin# = e.marginbounds.top 'πάνω περιθώριο σελίδας. Dim y# = 0 'Η θέση (ως προς το ύψος) της τρέχουσας γραμμής. Dim LinePrinted As Boolean = False e.graphics.pageunit = GraphicsUnit.Pixel 'Σε pixels οι υπολογισμοί. 'Tα σημεία έναρξης των στηλών στο x-άξονα. XCoord(0) = LeftMargin 'Για το ΑΑ. Dim i% For i = 1 To 4 'Για τα υπόλοιπα πεδία. Next XCoord(i) = XCoord(i - 1) + FieldsWidth(i - 1) + spacewidth 'Υπολόγισε το πλήθος των γραμμών ανά σελίδα. LinesPerPage = e.marginbounds.height / FontAA.GetHeight(e.Graphics) 'Τύπωσε μία-μία εγγραφή μέχρι να γεμίσει η σελίδα. While NbrLine < LinesPerPage

End While 'Υπολόγισε τό ύψος της σελίδας στο οποίο θα τυπωθεί η γραμμή. y = TopMargin + NbrLine * FontAA.GetHeight(e.Graphics) 'Εφόσον, υπάρχει κι άλλη εγγραφή, τύπωσέ τη, αλλιώς τέρμα. LinePrinted = PrintLine(y, e) If Not LinePrinted Then Exit While 'Και αύξησε τον αριθμό γραμμής κατά 1 και τον αριθμό εγγραφής κατά 1. NbrLine += 1 : DataRowNbr += 1 'Αν υπάρχουν κι άλλες σελίδες, τύπωσε κι άλλες. If LinePrinted Then Else EndIf `e.hasmorepages = True e.hasmorepages = False '-------------------------------------------------------------------- 'Τυπώνει μία γραμμή με τα πεδία της εγγραφής που θέλουμε. Private Function PrintLine(ByVal y#, _ ByVal e As System.Drawing.Printing.PrintPageEventArgs) _ As Boolean Try If DataRowNbr <= NbrOfDataRows - 1 Then Else End If 'Πάρε την εγγραφή. Dim r As DataRowView = MathitesView(DataRowNbr) 'Τύπωσε τα πεδία στοιχισμένα. PrintFieldAlign(DataRowNbr + 1, 0, FontAA, _ PrintAlignFieldEnum.Right, y, e) PrintFieldAlign(r.Item("ΕΠΩΝΥΜΟ"), 1, FontNormal, _ PrintAlignFieldEnum.Left, y, e) PrintFieldAlign(r.Item("ΟΝΟΜΑ"), 2, FontNormal,_ PrintAlignFieldEnum.Center, y, e) PrintFieldAlign(r.Item("ΗΜΕΡΟΜ_ΕΓΓΡΑΦΗΣ"), 3, FontNormal, _ PrintAlignFieldEnum.Right, y, e) PrintFieldAlign(r.Item("ΕΤΟΣ_ΓΕΝΝΗΣΗΣ"), 4, FontEtosGen, _ PrintAlignFieldEnum.Right, y, e) Return True Return False Catch ex As Exception

End Try End Function MsgBox("Πρόβλημα στην εκτύπωση της γραμμής " & DataRowNbr & _ vbcrlf & ex.message) Return False '--------------------------------------------------------------- 'Επιστρέφει το πεδίο στοιχισμένο αριστερά, δεξιά ή κέντρο στο διαθέσιμο χώρο MaxLen. Χρήσιμη ρουτίνα! Ο υπόλοιπος χώρος που περισσεύει, συμπληρώνεται με κενά. Private Function PrintFieldAlign(ByVal strfield$, ByVal nbrfield%, _ ByVal whatfont As Font, ByVal whatalign As PrintAlignFieldEnum, _ ByVal y#, ByVal e As System.Drawing.Printing.PrintPageEventArgs) _ As String Dim rect As RectangleF 'Το πλαίσιο εντός του οποίου θα τυπωθεί το πεδίο. Dim x# 'Το σημείο έναρξης εκτύπωσης του πεδίου στη στήλη. 'Υπολόγισε το πλάτος που πιάνουν οι χαρακτήρες του πεδίου με βάση το Font. 'Αν είναι παραπάνω, περιορίσου σε αυτό που έχει οριστεί για τη στήλη. Dim fldwidth As SizeF = e.graphics.measurestring(strfield, whatfont, _ FieldsWidth(nbrField)) 'Υπολόγισε, τώρα, το σημείο έναρξης της εκτύπωσης στη στήλη με βάση τη στοίχιση. Select Case whatalign End Select Case Is = PrintAlignFieldEnum.Left x = XCoord(nbrField) Case Is = PrintAlignFieldEnum.Right x = XCoord(nbrField) + FieldsWidth(nbrField) - fldwidth.width Case Is = PrintAlignFieldEnum.Center x = XCoord(nbrField) + FieldsWidth(nbrField) / 2 - fldwidth.width / 2 'Υπολόγισε το πλαίσιο εντός του οποίου θα τυπωθεί το πεδίο. With rect.x = x :.Y = y.width = fldwidth.width :.Height = whatfont.getheight(e.graphics) End With 'Τύπωσέ το. e.graphics.drawstring(strfield, whatfont, Brushes.Black, rect) End Function '--------------------------------------------------------------- End Class

Να έχετε υπόψη ότι στον καθορισμό της θέσης έναρξης μίας στήλης XCoord(i) θα πρέπει να ελέγξετε μην υπερβεί το δεξί περιθώριο της σελίδας. Ελέγξτε τη θέση σε σχέση με την τιμή e.marginbounds.right, στο γεγονός PrintPage. Μελετώντας τον κώδικα, μπορεί κάποιος να πάρει ιδέες για να φτιάξει μία δική του μηχανή εκτύπωσης. Χρήστος Μουρατίδης