Autor Beitrag
Chiller_No.1
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 62
Erhaltene Danke: 6

Win 7, Win XP, Win Vista
C++, C#, HTML
BeitragVerfasst: Do 29.07.10 14:14 
Moin C#ler.. ;)

Ich steh grad vo nem Problem..
Ich will eine DataGridView drucken. In dieser DataGridView sind Werte aus einer Tabelle, einer Datenbank. Ein paar Tage zuvor habe ich bereits eine Textdatei ausdrucken lassen allerdings schaffe iche s nicht den Quellcode auf ein DataGridView anzuwenden. Muss man da anders rangehen oder kann ich den alten Quelltext, mit ein paar Änderungen, benutzen?

EDIT: Textdatei drucken Quellcode..

ausblenden volle Höhe C#-Quelltext
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:
public drucken2()
        {
            InitializeComponent();

            foreach (String printer in PrinterSettings.InstalledPrinters)
            {
                printersList.Items.Add(printer.ToString());
            }
        }

        private void drucken2_Load(object sender, PrintPageEventArgs ppeArgs)
        {
            // Erstellt das Graphikobjekt
            Graphics g = ppeArgs.Graphics;
            float linesPerPage = 0;
            float yPos = 0;
            int count = 0;
            // Liest die Bandbreite vom PrintPageEventArgs
            float leftMargin = ppeArgs.MarginBounds.Left;
            float topMargin = ppeArgs.MarginBounds.Top;
            string line = null;
            //Berechnet die Zeilen pro Seite anhand der Höhe der Seite
            linesPerPage = ppeArgs.MarginBounds.Height /
            verdana10Font.GetHeight(g);
            //Liest eine Zeile nachder anderen mit dem Streamreader
            while (count < linesPerPage &&
            ((line = reader.ReadLine()) != null))
            {
                //Berechnet die Starposition
                yPos = topMargin + (count *
                verdana10Font.GetHeight(g));
                //Draw text
                g.DrawString(line, verdana10Font, Brushes.Black,
                leftMargin, yPos, new StringFormat());
                //Geht zur nächsten Zeile
                count++;
            }

            //Wenn der PrintPageEventArgs noch mehr Seiten zu drucken hat

            if (line != null)
            {
                ppeArgs.HasMorePages = true;
            }

            else
            {
                ppeArgs.HasMorePages = false;
            }
        }

        private void print_Click(object sender, EventArgs e)
        {
            if (printersList.Text == "")
            {
                MessageBox.Show("Sie müssen den Drucker noch angeben!");
            }
            else
            {
                OpenFileDialog fdlg = new OpenFileDialog();
                fdlg.Title = "Druck";
                fdlg.InitialDirectory = @"C:\Dokumente und Einstellungen\admin\Desktop\teste";
                fdlg.Filter = "Text files (*.txt | .txt | All files (*.*) | *.*";
                fdlg.FilterIndex = 2;
                fdlg.RestoreDirectory = true;

                if (fdlg.ShowDialog() == DialogResult.OK)
                {
                    textBoxX1.Text = fdlg.FileName;
                }
                try
                {
                    string filename = textBoxX1.Text.ToString();
                    //Deklariert ein StreamReaderobjekt
                    reader = new StreamReader(filename);
                    //Kreiert die Schriftar mit der Größe 10
                    verdana10Font = new Font("Verdana"10);
                    //Deklariert ein  PrintDocumentobjekt
                    PrintDocument pd = new PrintDocument();
                    //fügt PrintPage event handler hinzu
                    pd.PrintPage += new PrintPageEventHandler(this.drucken2_Load);
                    //Ruft die Druckmethode auf
                    pd.PrinterSettings.PrinterName = printersList.Text;

                    pd.Print();
                    //Close the reader
                    if (reader != null)
                        reader.Close();
                }
                catch (Exception a)
                {
                    MessageBox.Show("Ungültiger Pfad!");
                }
            }

        }


Mfg Chiller

_________________
L_ This is Schäuble. Copy Schäuble into your signature to help him on his
OL own way to Überwachungsstaat.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 29.07.10 14:34 
Du müßtest schon ein paar Änderungen am Quellcode vornehmen, um eine DGV (bzw. dessen Inhalt) zu drucken:
- statt des StreamReaders müßtest du über die DataSource (z.B. DataTable - falls du es benutzt) oder aber über die einzelnen Zeilen und Spalten iterieren und jede Zelle entsprechend ausdrucken
- je nach DGV-Zelle (TextBox, CheckBox, ComboBox, Image, ...) mußt du dann entsprechend drucken (Text und/oder Bild)

Eine Komponente zum Drucken beliebiger Controls findest du hier: www.mycsharp.de/wbb2...d.php?threadid=29704
(diese druckt jedoch nur den sichtbaren Bereich, d.h. wenn dein DGV eine Scrollbar enthält, würde nicht alles gedruckt werden)

P.S: Bei der Internet-Suche nach "CSharp DataGridView drucken" findest du auch noch weitere Hinweise (u.a. einen Report, z.B. ReportViewer oder Crystal Report zu benutzen)
Oder z.B.
www.codeproject.com/...gOfDataGridView.aspx (incl. Quellcode, d.h. so ähnlich, wie ich es oben erklärt habe -)

Für diesen Beitrag haben gedankt: Chiller_No.1
Chiller_No.1 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 62
Erhaltene Danke: 6

Win 7, Win XP, Win Vista
C++, C#, HTML
BeitragVerfasst: Do 29.07.10 14:42 
Hmm.. Ja den Link hatte ich auch schon bereits gefunden.. habe eig gehofft das es einfach geht ber ok dann werd ich mich mal reinarbeiten müssen.. ;)
Trotzdem Danke für die schnelle Hilfe.

mfg Chiller

_________________
L_ This is Schäuble. Copy Schäuble into your signature to help him on his
OL own way to Überwachungsstaat.