Autor Beitrag
Lens445
Hält's aus hier
Beiträge: 12


C#
BeitragVerfasst: Do 01.02.18 15:47 
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:

ausblenden 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)

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 01.02.18 17: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:
ausblenden 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):
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 12


C#
BeitragVerfasst: Fr 02.02.18 09:27 
Hey Th69!

Danke schon mal für deine Hilfe! :)
Hab es ausprobiert und wenn ich eben

ausblenden 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 user profile iconTh69: Quote-Tags hinzugefügt.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 02.02.18 10:23 
Dann paßt der Rückgabewert der Methode nicht.

Das sind aber Grundlagen des Programmierens. Wäre es nicht besser erst einmal diese komplett sich anzueignen (idealerweise sogar erst einmal mit Konsolenprogrammen), z.B. mittels des Open Books Visual C# 2012?
Lens445 Threadstarter
Hält's aus hier
Beiträge: 12


C#
BeitragVerfasst: Fr 02.02.18 11: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:

ausblenden 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);
            
            //Gibt die Inhalt der KSCHL an
            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;
            }
            

            //Inhalt von Errechnet ausgeben
            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:

ausblenden 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(); //Hier ist halt jetzt dieser Fehler

            foreach (var result in list)
            {
                _KschlResults.Add(new Components() {});
            }

            dataGridView1.DataSource = _KschlResults;
        }


Mein Ansatz müsste so doch aber stimmen oder :?: :gruebel:
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 02.02.18 11: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 Threadstarter
Hält's aus hier
Beiträge: 12


C#
BeitragVerfasst: Fr 02.02.18 12: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 02.02.18 18:08 
So eine Methode könntest du schreiben, ja. Du hast ja schon eine Klasse die die 3 Sachen zusammenfasst.