Laden...

Suche Lösung um alle eingefügten Rows einer ListView in ein printDocument zu bekommen.

Erstellt von ToRi vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.552 Views
Thema geschlossen
T
ToRi Themenstarter:in
18 Beiträge seit 2018
vor 5 Jahren
Suche Lösung um alle eingefügten Rows einer ListView in ein printDocument zu bekommen.

Hallo zusammen,

in einer ListView fasse ich Artikel zusammen, die dann auch auf einer Quittung (printDocument) erschenen sollen. Die ListView hat 4 Spalten, 3 davon werden übertragen. Nun, das übertragen an sich ist eigentlich nicht das Problem, sondern das übertragen mehrerer Zeilen untereinander, oder einfach alles was gerade in der ListView bzw. der .Items[0].SubItems[0], .Items[0].SubItems[2] und .Items[0].SubItems[3] etc. steht.

Ich mache ein einfaches prinDocument und übertrage wie folgt:


private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{           
       float x1 = 10;
       float x2 = 40;
       float y = 5;
       float width = 270.0F; 
       float height = 0F;       
            
       Font drawFontArial12Bold = new Font("Arial", 12, FontStyle.Bold);
       Font drawFontArial10Regular = new Font("Arial", 10, FontStyle.Regular);
       SolidBrush drawBrush = new SolidBrush(Color.Black);

       // Set format of string.
       StringFormat drawFormatCenter = new StringFormat();
       drawFormatCenter.Alignment = StringAlignment.Center;
       StringFormat drawFormatLeft = new StringFormat();
       drawFormatLeft.Alignment = StringAlignment.Near;
       StringFormat drawFormatRight = new StringFormat();
       drawFormatRight.Alignment = StringAlignment.Far;                      

       // Draw string to screen.
       string text = "Firma";
       e.Graphics.DrawString(text, drawFontArial12Bold, drawBrush, new RectangleF(x1, y, width, height), drawFormatCenter);
       y += e.Graphics.MeasureString(text, drawFontArial12Bold).Height;            

       text = "Adresse";
       e.Graphics.DrawString(text, drawFontArial10Regular, drawBrush, new RectangleF(x1, y, width, height), drawFormatCenter);
       y += e.Graphics.MeasureString(text, drawFontArial10Regular).Height;
       
       //Atrikel von ListView1 übertragen. Das funktioniert nur für eine bzw. zwei Zeilen.
       //So was wie "text += ListView1.Items[x].SubItems[0].Text" suche ich.
       text = ListView1.Items[0].SubItems[0].Text + ListView1.Items[0].SubItems[2].Text + ListView1.Items[0].SubItems[3].Text;                 
       e.Graphics.DrawString(text, drawFontArial10Regular, drawBrush, new RectangleF(x2, y, width, height), drawFormatLeft);
       y += e.Graphics.MeasureString(text, drawFontArial10Regular).Height;
            
       text = ListView1.Items[1].SubItems[0].Text + ListView1.Items[1].SubItems[2].Text + ListView1.Items[1].SubItems[3].Text;
       e.Graphics.DrawString(text, drawFontArial10Regular, drawBrush, new RectangleF(x2, y, width, height), drawFormatLeft);
       y += e.Graphics.MeasureString(text, drawFontArial10Regular).Height;
            
       //Und so weiter
}

G
74 Beiträge seit 2018
vor 5 Jahren

hi, warum machst du da nicht eine for schleife draus, z.bsp. so...

in dem du einfach bei 0 anfängst und bis zum Listview1.count durchzählst ? und einfach um 1 incrementierst und dann deinen text wiefolgt zusammenbastelst

Items[variableausforschleife].Subitems[0].... und so weiter... ?

bin gerade nicht zuhause, deswegen hab ich gerade keinen code zur hand

Edit: lass mich mal gucken, ich bin dran... moment

G
74 Beiträge seit 2018
vor 5 Jahren

alternativ könntest ja mit nem Stringbuilder arbeiten der in einer for schleife steckt.

Allerdings weiß ich nicht, wie sich das mit dem ausdrucken verhält, hab hier keine erfahrungswerte

T
ToRi Themenstarter:in
18 Beiträge seit 2018
vor 5 Jahren

Hi Glowhollow, vielen Dank für die Antwort. Mit Schleife habe ich mal was gebastelt, wollte aber nicht recht. Aber das soll nicht heissen, dass es nicht gehen würde. Es liegt wohl eher an mir X( Ich denke dem printDoc. ist das ziemlich egal, solange sich das Ergebnis mit text = (irgend etwas) interpretieren lässt.

T
ToRi Themenstarter:in
18 Beiträge seit 2018
vor 5 Jahren

Das habe ich jetzt mal so gemacht:


for (int zahl = 0; zahl <= 100; ++zahl)
     text = "  " + listView1.Items[zahl].SubItems[0].Text;                  
     e.Graphics.DrawString(text, drawFontArial10Regular, drawBrush, new RectangleF(x2, y, width, height), drawFormatLeft);
     y += e.Graphics.MeasureString(text, drawFontArial10Regular).Height;

Bekomme aber folgende Fehlermeldung:

Fehlermeldung:
InvalidArgument=Value mit dem Wert 3 ist für index ungültig.
Parametername: index

Der Wert 3 ist die Anzahl eingefügter Zeilen in den ListView1. Woran liegt das?

2.207 Beiträge seit 2011
vor 5 Jahren

Hallo ToRi,

der Index startet bei 0. Wenn du drei Elemente in der Liste hast, hast du 0, 1 und 2. Der dritte knallt dann. Bitte lies dir mal die Grundlagen durch. [FAQ] Wie finde ich den Einstieg in C#? [Tipp] Schau in die Doku! - Möglichkeiten der Informationsgewinnung [Artikel] Debugger: Wie verwende ich den von Visual Studio?

Gruss

Coffeebean

T
ToRi Themenstarter:in
18 Beiträge seit 2018
vor 5 Jahren

Hallo Coffeebean,

danke für die Links. Ich werde mir die Zeit mehmen, all das zu lesen. Doch im Moment habe ich dafür leider nicht die nötige Zeit, sonst würde ich ja nicht hier nachfragen.

Grüsse

ToRi

3.003 Beiträge seit 2006
vor 5 Jahren

Doch im Moment habe ich dafür leider nicht die nötige Zeit, sonst würde ich ja nicht hier nachfragen.
i

Deine Zeit ist also wertvoller als unsere. Danke, dass wir zu Diensten sein dürfen.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

T
ToRi Themenstarter:in
18 Beiträge seit 2018
vor 5 Jahren

Wenn ich dafür 5 Stunden brauche habt Ihr das in 5 Min., nehem ich zumindest mal an!! Aber wahrscheinlich hast du ja recht, also habe ich nun lieber 5 Stunden und muss danach nie wieder Fragen. Ich stelle mir gerade das Szenarion hier vor, wenn ich mal etwas wirklich kompliziertes habe. Also danke für den Eindruck den ihr gerade hinterlässt, da verzichte ich lieber und lese eben weiter!!

T
461 Beiträge seit 2013
vor 5 Jahren

Versteh ich nicht, wenn man so etwas entwickeln muß und man noch keine Kenntnisse darüber hat, müßte das normal mit einberechnet werden.

Besonders wenn es um so grundlegende Dinge geht.

Die Leute hier können nichts dafür, für deine Situation in der du gerade steckst.
Eine Antwort zur letzten Frage hast ja schon bekommen...

Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄

4.938 Beiträge seit 2008
vor 5 Jahren

Also das sind ja elementarste Grundlagen.
Da frage ich mich wirklich, wie man ein Projekt mit UI und Druckerausgabe angehen kann, ohne Schleifen zu kennen???

3.003 Beiträge seit 2006
vor 5 Jahren

Wenn ich dafür 5 Stunden brauche habt Ihr das in 5 Min., nehem ich zumindest mal an!! Aber wahrscheinlich hast du ja recht, also habe ich nun lieber 5 Stunden und muss danach nie wieder Fragen. Ich stelle mir gerade das Szenarion hier vor, wenn ich mal etwas wirklich kompliziertes habe. Also danke für den Eindruck den ihr gerade hinterlässt, da verzichte ich lieber und lese eben weiter!!

Interessant. Erst fragst du etwas, dann bekommst du Antworten. Dann sagst du, dass du für die Antwort keine Zeit hast, DANN sagst du, deine Zeit sei wertvoller als unsere, und wenn wir das nicht so toll finden, sind wir diejenigen, die sich nicht benehmen können.

Opfere mal 20 Sekunden deiner Zeit und lies [Hinweis] Wie poste ich richtig?, Abschnitt 4. Es sind nur drei Sätze. Mit diesen Regeln hast du dich einverstanden erklärt, als du dich angemeldet hast. Also halte dich an dein Versprechen.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

T
ToRi Themenstarter:in
18 Beiträge seit 2018
vor 5 Jahren

Programmiere normalerweise nicht in C#, ist also noch gewöhnungsbedürftig. Habe erst vor 2 Wochen damit begonnen. Schlaufen sind mir eigentlich ziemlich gut bekannt. Es ging darum den Fehler zu lösen, nicht seine Herkunft zu diskutieren. Egal, das Problem habe ich mittlerweile onehin gelöst. Ja, bestimmt habe ich hier noch nicht alles gelesen, dann wisst ihr ja sicher, wie man seinen Account hier wieder löscht ?

T
ToRi Themenstarter:in
18 Beiträge seit 2018
vor 5 Jahren

Die Artikel "Account löschen" habe ich gefunden.

2.207 Beiträge seit 2011
vor 5 Jahren

Da der TE eine Lösung hat und keiner will, dass es hier entgleitet, habe ich hier mal zugemacht.

Thema geschlossen