Entwickler-Ecke
WinForms - DataGridView in WinForms erstellen mit einer Klasse?
Lens445 - Do 01.02.18 14:47
Titel: DataGridView in WinForms erstellen mit einer Klasse?
Hey Leute, bin neu hier im Forum und allgemein in der Welt des Programmierens :D
Ich habe eine Klasse (Components) und die Ergebnisse davon möchte ich in einer DataGridView ausgeben. Jetzt habe ich noch nie vorher damit gearbeitet :?: und finde das sehr verwirrend noch :?
Hier mal ein Teil meines Codes aus der Klasse Components:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var kschlResultList = docResult.SelectNodes("//root/CalculationLogCompact/CalculationLogRowCompact/KSCHL/text() [and Errechnet>0]");
foreach (XmlText nextText in kschlResultList) { string nextKschl = nextText.InnerText; string nextPath = "//SNW5_Pricing_JKV-Q10_full/PricingProcedure[KSCHL/text()=\"" + nextKschl + "\"]/INFO/text()"; string nextInfo = docData.SelectSingleNode(nextPath).InnerText; } |
Ich möchte alle KSCHL und Info (und Preis) ausgeben.
hab das mal so probiert (funktioniert aber nicht und ich weiß nicht was ich genau tun muss)
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:
| public partial class Form1 : Form { public Form1() { InitializeComponent(); }
class allComponents { public string KSCHL { get; set; } public string Info { get; set; } public int Price { get; set; } }
private void button1_Click(object sender, EventArgs e) { allComponents allComponents = new allComponents();
Components components = new Components();
KSCHL = allComponents.GetAllKschl();
List < allComponents > list = new List<allComponents>(); list.Add(KSCHL); list.Add(Info); list.Add(Price); dataGridView1.DataSource = list; |
Was fehlt mir/ist falsch? Wär so lieb wenn ihr mir helfen könntet :)
Th69 - Do 01.02.18 16:14
Hallo und :welcome:
der Ansatz mittels
DataSource und Verwenden einer
List<> ist auf jeden Fall schon mal richtig.
Jedoch füllst du die Liste anscheinend falsch - hier ein Beispiel:
C#-Quelltext
1: 2: 3: 4: 5:
| List<allComponents> list = new List<allComponents>();
list.Add(new allComponents() { KSCHL = "4711", Info = "info...", Price = 48 });
dataGridView1.DataSource = list; |
Jetzt mußt du noch deine Klasse
Components daran anbinden, d.h. diese sollte am besten die
List<allComponents> mittels einer Methode oder Eigenschaft zurückliefern (und dabei dann die Klasse
allComponents in die Klasse
Components verschieben - damit diese dort bekannt ist):
C#-Quelltext
1:
| List<allComponents> list = components.GetAllComponents(); |
PS: Klassennamen sollten mit einem Großbuchstaben beginnen, also besser
AllComponents bzw. noch besser gleich vom Namen her
Component - also in Einzahl (Vllt. bist du auch deswegen mit dem Code ein wenig durcheinander gekommen?)!
Lens445 - Fr 02.02.18 08:27
Hey Th69!
Danke schon mal für deine Hilfe! :)
Hab es ausprobiert und wenn ich eben
C#-Quelltext
1: 2:
| Components components = new Components(); List<Components> list = components.GetAllKschl(); |
mache, dann gibt er mir eine Fehlermeldung aus:
| Zitat: |
| Error CS0029 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<Conditions.Components> |
Moderiert von
Th69: Quote-Tags hinzugefügt.
Lens445 - Fr 02.02.18 10:06
Nein, ich weiß schon dass es daran liegt. Aber kann man das nicht auch anders schreiben, so dass ich keine Rückgabewert in meiner Klasse brauche?
Meine Klasse Components:
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:
| public void GetAllKschl() { docResult.Load(fileNameResult); docData.Load(fileNameData); var kschlResultList = docResult.SelectNodes("//root/CalculationLogCompact/CalculationLogRowCompact/KSCHL/text()");
foreach (XmlText nextText in kschlResultList) { string nextKschl = nextText.InnerText; string nextPath = "//SNW5_Pricing_JKV-Q10_full/PricingProcedure[KSCHL/text()=\"" + nextKschl + "\"]/INFO/text()"; string nextInfo = docData.SelectSingleNode(nextPath).InnerText; }
var calculatedList = docResult.SelectNodes("//root/CalculationLogCompact/CalculationLogRowCompact/Errechnet");
for (int i = 0; i < calculatedList.Count; i++) { int calculated = Convert.ToInt32(calculatedList[i].InnerText);
if (calculated > 0) { int calc = calculated; } } } |
Z.b. habe ich es mal so probiert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| public partial class Form1 : Form { private List<Components> _KschlResults;
public Form1() { InitializeComponent(); _KschlResults = new List<Components>(); }
private void button1_Click(object sender, EventArgs e) { Components components = new Components(); List<Components> list = components.GetAllKschl(); foreach (var result in list) { _KschlResults.Add(new Components() {}); }
dataGridView1.DataSource = _KschlResults; } |
Mein Ansatz müsste so doch aber stimmen oder :?: :gruebel:
Th69 - Fr 02.02.18 10:28
Was soll denn der Sinn dieser Methode dann sein, wenn sie keine Werte zurückliefert?
Nur reine Ausgabe oder Setter-Methoden brauchen keinen Rückgabewert (also void).
Lens445 - Fr 02.02.18 11:13
Dachte eben ich kann die Werte dann in dem Click Event ausgeben.. :gruebel:
Dann muss meine Methode also die KSCHL, Info und Preis zurückgeben?
lg
Ralf Jansen - Fr 02.02.18 17:08
So eine Methode könntest du schreiben, ja. Du hast ja schon eine Klasse die die 3 Sachen zusammenfasst.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!