Benutzer mit den meisten Antworten
Wie ich erstelle ich mit C# einen Kassenbon Textformat am besten?

Frage
-
Hallo,
ich möchte einen Kassenbon erstellen. Ich habe bisher alle Daten/Text die auf dem Kassenbon erscheinen soll.
Die Daten sind:
- Kunden Datenbank
- Combox auf dem man eine Menü 1 oder Produkt wählen kann und dessen der Preis in einem Textbox angezeigt wird.
Jetzt möchte ich die gewählte Kunde und das Gewählte Produkt + Preis in einem Textbox/Groupbox/listbox/listview darstellen.
Ich weiß gar nicht welche von den Textbox/Groupbox/listbox/listview benutzen, weil ich die Ausgabe so formatiert haben möchte:
Menü 1 3,35 € Menü 3 8,25 € Menü 4 5,00 € Summe 16,60 €
Sozusagen das die gewählte menü auf der linke(linksbündig) Seite erscheinen und der Preis auf der rechteseite(rechtsbündig)
Wie könnte ich das realisieren?
Grüße TaMBeY
- Bearbeitet TaMBeY Montag, 3. November 2014 09:43
Antworten
-
Hi,
mit dem DataGridView kannst Du das problemlos machen. Nachfolgend eine kleines Demo:using System; using System.Collections.Generic; using System.Windows.Forms; using System.Linq; namespace WindowsFormsApplication1 { public partial class Form3 : Form { public Form3() { InitializeComponent(); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); List<Ausgabe> kasse = new List<Ausgabe>() { new Ausgabe() { Menue = "Menue 1", Preis = 3.35m }, new Ausgabe() { Menue = "Menue 3", Preis = 8.25m }, new Ausgabe() { Menue = "Menue 4", Preis = 5m }, new Ausgabe()}; kasse.Add(new Ausgabe() { Menue = "Summe", Preis = kasse.Sum<Ausgabe>(c => c.Preis) }); DataGridView grd = new DataGridView() { Dock = DockStyle.Fill, AutoGenerateColumns=false }; grd.SuspendLayout(); grd.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "Menü", DataPropertyName = "Menue" }); grd.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "Preis", DataPropertyName = "Preis", DefaultCellStyle = new DataGridViewCellStyle() { Format = "C2", Alignment = DataGridViewContentAlignment.MiddleRight, NullValue="" }, }); this.Controls.Add(grd); grd.DataSource = kasse; grd.ResumeLayout(); } class Ausgabe { public string Menue { get; set; } public decimal? Preis { get; set; } } } }
--
Peter
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Aleksander Chalabashiev Montag, 3. November 2014 10:43
- Als Antwort markiert Aleksander Chalabashiev Montag, 10. November 2014 07:43
-
Hi,
wenn du kein DataGridView nutzen möchtest (was nur eine von vielen Möglichkeiten ist) kannst du deine Stringbuilder Variablen auch per PrintDocument (Klasse in NET) ausdrucken.
Der Vorteil von Peters Vorschlag ist das die Formatierung viel einfacher wird. Die Frage ist auch ob die Belege gespeichert werden müssen, normalerweise ist das so. Wenn ja ist die Frage wie und wo... als Textfile -> dann könntest du formatierte Textfiles erzeugen und drucken oder in einer Datenbank. Eine weitere Möglichkeit wäre der ReportViewer in NET. Ohne Hintergrund ist es aber schwer zu entscheiden was das richtige sein könnte. Erkläre mal ob das nur just for fun ist oder ein richtiges Projekt ist wie bspw. eine Kassensoftware.
Gruß
Jens Gerber
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 4. November 2014 13:02
- Als Antwort markiert Aleksander Chalabashiev Montag, 10. November 2014 07:43
-
Hi,
wenn Du ohne Oberflächen-Elemente arbeiten willst und nur mit dem StringBuilder, dann kann der folgende Codeschnipsel dienen, Wichtig dabei ist, dass die Ausgabe mit einem nicht-proportionalen Zeichensatz ausgeführt wird.using System; using System.Collections.Generic; using System.Windows.Forms; using System.Linq; using System.Text; namespace WindowsFormsApplication1 { public partial class Form3 : Form { public Form3() { InitializeComponent(); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); List<Ausgabe> kasse = new List<Ausgabe>() { new Ausgabe() { Menue = "Menue 1", Preis = 3.35m }, new Ausgabe() { Menue = "Menue 3", Preis = 8.25m }, new Ausgabe() { Menue = "Menue 4", Preis = 5m }, new Ausgabe()}; kasse.Add(new Ausgabe() { Menue = "Summe", Preis = kasse.Sum<Ausgabe>(c => c.Preis) }); // StringBuilder sb = new StringBuilder(); foreach (var item in kasse) { sb.Append(string.Format("{0,-10} {1,10:C2}{2}", item.Menue, item.Preis, Environment.NewLine)); } TextBox tb = new TextBox() { Multiline = true, Height = 100, Width = 200, Font = new System.Drawing.Font("Courier New", 10) }; tb.Text = sb.ToString(); this.Controls.Add(tb); } class Ausgabe { public string Menue { get; set; } public decimal? Preis { get; set; } } } }
--
Peter
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Aleksander Chalabashiev Mittwoch, 5. November 2014 07:39
- Als Antwort markiert Aleksander Chalabashiev Montag, 10. November 2014 07:43
Alle Antworten
-
Hi,
mit dem DataGridView kannst Du das problemlos machen. Nachfolgend eine kleines Demo:using System; using System.Collections.Generic; using System.Windows.Forms; using System.Linq; namespace WindowsFormsApplication1 { public partial class Form3 : Form { public Form3() { InitializeComponent(); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); List<Ausgabe> kasse = new List<Ausgabe>() { new Ausgabe() { Menue = "Menue 1", Preis = 3.35m }, new Ausgabe() { Menue = "Menue 3", Preis = 8.25m }, new Ausgabe() { Menue = "Menue 4", Preis = 5m }, new Ausgabe()}; kasse.Add(new Ausgabe() { Menue = "Summe", Preis = kasse.Sum<Ausgabe>(c => c.Preis) }); DataGridView grd = new DataGridView() { Dock = DockStyle.Fill, AutoGenerateColumns=false }; grd.SuspendLayout(); grd.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "Menü", DataPropertyName = "Menue" }); grd.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "Preis", DataPropertyName = "Preis", DefaultCellStyle = new DataGridViewCellStyle() { Format = "C2", Alignment = DataGridViewContentAlignment.MiddleRight, NullValue="" }, }); this.Controls.Add(grd); grd.DataSource = kasse; grd.ResumeLayout(); } class Ausgabe { public string Menue { get; set; } public decimal? Preis { get; set; } } } }
--
Peter
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Aleksander Chalabashiev Montag, 3. November 2014 10:43
- Als Antwort markiert Aleksander Chalabashiev Montag, 10. November 2014 07:43
-
Hi,
Bitte beschreibe genauer, welche Techniken Du für den Bondrucker nutzen kannst/willst.--
Peter
Meine Homepage mit Tipps und Tricks -
Also,
ich habe eine Kunden-Datenbank. Gebe die ID der Kunde die in der Tabelle eingetragen ist und schreibe ich eine Stringbuilder Variable.
Danach Wähle ich eine Menü aus ComboBox und lasse das berechnete Preis in eine Textbox schreiben. Die Werte werden ebenfalls in die Stringbuilder Variable rein geschrieben.
Ich möchte jetzt als letztens die Werte in der Stringbuilder Variable so Formatiert haben:
Menü 1 12,0 € Menü 2 13,25 € Summe 25,25 €
Das einzige was fehlt ist die Formatierte Ausgabe wie Oben.
Danke für deine Hilfe Peter.
- Bearbeitet TaMBeY Montag, 3. November 2014 20:23
-
Hi,
wenn du kein DataGridView nutzen möchtest (was nur eine von vielen Möglichkeiten ist) kannst du deine Stringbuilder Variablen auch per PrintDocument (Klasse in NET) ausdrucken.
Der Vorteil von Peters Vorschlag ist das die Formatierung viel einfacher wird. Die Frage ist auch ob die Belege gespeichert werden müssen, normalerweise ist das so. Wenn ja ist die Frage wie und wo... als Textfile -> dann könntest du formatierte Textfiles erzeugen und drucken oder in einer Datenbank. Eine weitere Möglichkeit wäre der ReportViewer in NET. Ohne Hintergrund ist es aber schwer zu entscheiden was das richtige sein könnte. Erkläre mal ob das nur just for fun ist oder ein richtiges Projekt ist wie bspw. eine Kassensoftware.
Gruß
Jens Gerber
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 4. November 2014 13:02
- Als Antwort markiert Aleksander Chalabashiev Montag, 10. November 2014 07:43
-
Hi,
wenn Du ohne Oberflächen-Elemente arbeiten willst und nur mit dem StringBuilder, dann kann der folgende Codeschnipsel dienen, Wichtig dabei ist, dass die Ausgabe mit einem nicht-proportionalen Zeichensatz ausgeführt wird.using System; using System.Collections.Generic; using System.Windows.Forms; using System.Linq; using System.Text; namespace WindowsFormsApplication1 { public partial class Form3 : Form { public Form3() { InitializeComponent(); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); List<Ausgabe> kasse = new List<Ausgabe>() { new Ausgabe() { Menue = "Menue 1", Preis = 3.35m }, new Ausgabe() { Menue = "Menue 3", Preis = 8.25m }, new Ausgabe() { Menue = "Menue 4", Preis = 5m }, new Ausgabe()}; kasse.Add(new Ausgabe() { Menue = "Summe", Preis = kasse.Sum<Ausgabe>(c => c.Preis) }); // StringBuilder sb = new StringBuilder(); foreach (var item in kasse) { sb.Append(string.Format("{0,-10} {1,10:C2}{2}", item.Menue, item.Preis, Environment.NewLine)); } TextBox tb = new TextBox() { Multiline = true, Height = 100, Width = 200, Font = new System.Drawing.Font("Courier New", 10) }; tb.Text = sb.ToString(); this.Controls.Add(tb); } class Ausgabe { public string Menue { get; set; } public decimal? Preis { get; set; } } } }
--
Peter
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Aleksander Chalabashiev Mittwoch, 5. November 2014 07:39
- Als Antwort markiert Aleksander Chalabashiev Montag, 10. November 2014 07:43