Laden...

Array aus anderer Methode holen

Erstellt von xKushGene vor 7 Jahren Letzter Beitrag vor 7 Jahren 3.251 Views
X
xKushGene Themenstarter:in
91 Beiträge seit 2017
vor 7 Jahren
Array aus anderer Methode holen

Guten Tag,
ich möchte auf ein Array in meiner Methode test() von einer anderen Methode aus zugreifen.

Meine test() Methode sieht wie folgt aus:

public void test()
        {
            DataTable schema = null;
            myclass.db_connection();
            MySqlCommand cmd = new MySqlCommand();
            cmd.CommandText = "SELECT * FROM kunden";
            cmd.Connection = myclass.connect;
            MySqlDataReader reader = cmd.ExecuteReader();
            schema = reader.GetSchemaTable();
            string[] columnNames = schema.Rows.OfType<DataRow>().Select(p => p.Field<String>("ColumnName")).ToArray();

            List<Label> customLabels = new List<Label>();
            foreach (DataRow col in schema.Rows)
            {
                Label[] fieldLabel = new Label[columnNames.Length];
                Panel[] fieldPanel = new Panel[columnNames.Length];
                TextBox[] fieldBox = new TextBox[columnNames.Length];
                
                for(int i = 0; i < columnNames.Length; i++)
                {
                    // Field Panel
                    fieldPanel[i] = new Panel();
                    fieldPanel[i].Size = new Size(296, 29);
                    
                    // Field Panel Label
                    fieldLabel[i] = new Label();
                    fieldLabel[i].Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    fieldLabel[i].Location = new Point(9, 6);
                    fieldLabel[i].Text = col.Field<String>("ColumnName");

                    // Field Panel TextBox
                    fieldBox[i] = new TextBox();
                    fieldBox[i].Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    fieldBox[i].Location = new Point(124, 3);
                    fieldBox[i].Size = new Size(166, 23);
                    fieldBox[i].Name = col.Field<String>("ColumnName") + "Box";

                }

                for(int i = 0; i < 1; i++)
                {
                    customLabels.Add(fieldLabel[i]);
                    this.Controls.Add(fieldLabel[i]);
                    this.Controls.Add(fieldBox[i]);
                    fieldPanel[i].Controls.Add(fieldLabel[i]);
                    fieldPanel[i].Controls.Add(fieldBox[i]);
                    this.Controls.Add(fieldPanel[i]);

                    flowLayoutPanel1.Controls.Add(fieldPanel[i]);
                }
            }        
        }

Ich möchte nun den Text von fieldBox haben, um den am ende in eine Datenbank eintragen zu können.

Das alles per Button klick.

Ich habe mir gedacht, machste mal n Array Global.

TextBox[] fieldBox = new TextBox[columnNames.Length];

Allerdings funktioniert das auch nicht, da columnNames erst in meiner Methode test();
erstellt wird.
Nun Frage ich mich, wie ich die Array Ergebnisse von fieldBox nun in meine button2_Click Methode bekomme.

Sitze nun schon 2 Stunden hier und google mich durchs Netz um verschiedene Lösungen (wenn es denn zutreffend ist) auszuprobieren..

16.806 Beiträge seit 2008
vor 7 Jahren

Du machst hier strukturell alles falsch, was man falsch machen kann.
Du hast hier in einer einzigen Methode UI, Businesslogik und Datenbank gemischt: das muss knallen.

Beschäftige Dich mit den Grundlagen von OOP und trenne den Code nach ihren Aufgaben () [Artikel] Drei-Schichten-Architektur

X
xKushGene Themenstarter:in
91 Beiträge seit 2017
vor 7 Jahren

Ich sag mal so, an sich funktioniert ja alles.
Für jede Spalte in der Datenbank wird ein label und eine textbox erstellt.
Solange es funktioniert will ich da nichts verändern.

Jetzt brauch ich nur den Text den man in den TextBoxen eingibt.
Ich habe diese 3 Schichten Architektur schon eingebaut (myclass.db_connection ist in einer anderen Schicht).
Allerdings komme ich damit noch nicht ganz so klar, weshalb ich alles so weiter gemacht habe wie ich weiß das es erst einmal funktioniert.

1.040 Beiträge seit 2007
vor 7 Jahren

Ohne die Grundlagen stolperst du allerdings immer nur von einer Frage zur nächsten, ohne tlw. die Antworten überhaupt richtig zu verstehen. Und du ziehst teilweise falsche Rückschlüsse.

Bsp. in diesem Beitrag:
Du wunderst dich, dass im FlowLayoutPanel nur ein Label angezeigt wird - warum das so ist, springt einem allerdings förmlich ins Auge (spätestens mit dem [Artikel] Debugger: Wie verwende ich den von Visual Studio?)
Zudem der falsche Rückschluss mit den Controls.

Es hilft dir, wenn du erstmal die Grundlagen erlernst und festigst.
Auch wenn es am Anfang evtl. eher reine Theorie ist.

X
xKushGene Themenstarter:in
91 Beiträge seit 2017
vor 7 Jahren

Das Ding ist, mein Chef möchte Ergebnisse sehen. Es kommt schlecht wenn ich nun meine 4 Monate die ich hier bin mit lesen verbringe und mein Chef davon am ende gar nichts hat.

Klar wollte ich auch langsam mal anfangen, ein Buch zu durchlaufen.
Solange ich hier auf Antworten warte schaue ich nebenbei im FAQ nach, was mir bei meinem Lernen weiterhelfen kann.

Aber wie schon erwähnt, kann ich hier jetzt nicht 4 Monate sitzen und mir die Grundlagen beibringen, die eigentlich mein Dozent in der Schule hätte beibringen sollen (und dafür zahlt BaFöG 400€ im Monat clap clap).

Ich bin im 2. Jahr und weiß fast gar nichts über die Programmierung. Klar if else, syntax usw alles weiß ich.

Hier möchte ich jetzt nur programmieren und auch selbst sehe ich "ah ich hab was programmiert, es funktioniert, auch wenn 80% davon copy paste ist" aber mich macht das schon ein wenig Stolz, dafür das ich eigentlich kaum etwas weiß.

Es ist halt nh schwierige Situation für mich und versuche neben meinen Versuchen von copy paste, etwas dazu zu lernen. So bringe ich mir derzeit C# bei. Copy paste -> sehen was passiert -> eventuell verstehen -> umändern/rumprobieren -> Lernerfolg.

1.040 Beiträge seit 2007
vor 7 Jahren

Du kommst mit den Grundlagen in Zukunft - auch schon in naher Zukunft - definitiv schneller voran, als wenn du für jedes Problem ein neues Thema eröffnest.
Auch sollst du nicht 4 Monate nur Theorie büffeln.

Weiterhin bin ich der Meinung, dass dein Chef von der ganzen Frickelei am Ende wenig bis gar nichts hat und eher die Hände über dem Kopf zusammenschlägt. Stell dir mal vor, ein anderer Kollege muss das Programm mal warten bzw. erweitern.
Was hat dein Chef davon, wenn du auch in Zukunft gar nicht weißt, wie man richtig programmiert?
Mit Copy+Paste wirst du nicht ewig vorankommen.
Warum sprichst du nicht einfach mit deinem Chef und erklärst ihm die Situation?

16.806 Beiträge seit 2008
vor 7 Jahren

Mit Copy Paste hast Du nichts programmiert, gar nichts. Sondern nur zusammen geschustert.
Du kannst so weiter machen, wirst Dich aber mit folgenden Tatsachen abfinden müssen:

* Du wirst hier immer weniger Hilfe von Leuten bekommen, wenn sie merken, Du willst gar nichts verstehen, sondern nur eine Lösung für Copy Paste. Die Leute lassen sich hier nicht ausnutzen.

Wir haben hier schon genug Gäste gehabt, die mit Copy Paste auf Dauer auf die Nase geflogen sind.
Daher versteh das als Ratschlag.

Ein Studium ist übrigens nicht dafür da, dass Dir jeder alles beibringt - das war es auch noch nie.
Manchmal muss man sich auch selbst was beibringen. Wir machen das hier auch alles in unserer Freizeit. Keiner bezahlt uns Dir zu helfen.

X
xKushGene Themenstarter:in
91 Beiträge seit 2017
vor 7 Jahren

Weil mein Chef Ergebnisorientiert ist.
Ich bin jetzt zum 3. mal hier. Es ist ein kleiner PC Laden wo man halt PCs reparieren lassen kann und mein Chef ist ausgebildeter Systemsintegrator. Das heißt, von Programmierung an sich kann er mir nicht helfen. Das heißt, ich muss mir alles selber beibringen.

Aber was bringe ich ihm, wenn ich hier sitze und erstmal Bücher lese.
In dem Zeitraum wo ich für mich lerne, bringe ich ihm absolut gar nichts.

In den ersten beiden Praktikas habe ich PHP/HTML gemacht (wo ich mittlerweile das meiste vergessen habe, da nach praktikum nie benutzt worden)

Das heißt, die ersten beiden praktikas waren schonmal totale Zeitverschwendung, denn ich will ja Programmierer werden und kein Webdesigner.

In diesem Praktikum (start vor 1 Woche) habe ich ihn extra gefragt ob ich denn C# lernen kann, das hilft mir weiter, denn genau als das soll ich ja ausgebildet werden.

In dem Punkt habe ich sag ich mal einen Fortschritt gemacht.

Nun soll ich ihn ein programm schreiben, womit er Kunden verwalten kann. Also kunden hinzufügen, löschen bearbeiten, Aufträge erstellen, Rechnungen erstellen und drucken.
Das ganze mit den Spalten aus den Datenbank ziehen ist eben dazu da, falls er sag ich mal noch eine Spalte für Fax und Telefon sag ich mal hinzuzufügen, wenn er das denn will. Oder andere Spalten hinzuzufügen/löschen.

Demnach schreibe ich also das Programm und sobald ich etwas nicht weiß, was ich aber brauche google ich nach damit das fertig wird.

Wenn ich jetzt anfangen würde mir die Grundlagen etc beizubringen, dann war alles, was ich bisher gemacht habe umsonst, da der Code einfach (sorry) scheiße ist. Aber als Anfänger ist das doch normal.

Er wird keinen Kollegen sagen "füg hier mal etwas hinzu" da hier niemand sonst arbeitet, der Programmieren kann. Mein Chef leitet den Laden alleine. Demnach kann der code noch so gammlig sein, Hauptsache es funktioniert.

Edit:

* Du wirst hier immer weniger Hilfe von Leuten bekommen, wenn sie merken, Du willst gar nichts verstehen, sondern nur eine Lösung für Copy Paste. Die Leute lassen sich hier nicht ausnutzen.

Das Ding ist, dass ich die Leute hier nicht ausnutzen möchte, sondern lediglich nur vorankommen an meinem Problem. Wie zum Beispiel dieses array aus der Methode holen. Ich habe absolut keine Ahnung wie ich das anstellen soll und frage deshalb hier um Hilfe. Natürlich schaue ich vorher IMMER bei anderen Seiten nach und versuche dort die Dinge aus, die ich gefunden habe. Was auch manchmal funktioniert. Nur wenn auch das nicht hilft, dann, erst dann frage ich hier.
Natürlich habe ich das Gefühl, manchen ein wenig auf die Nerven zu gehen, wenn ich hier immer nachfrage. Aber wie schon gesagt, ich will einfach weiterkommen bei Dingen die für mich noch zu hoch sind.

16.806 Beiträge seit 2008
vor 7 Jahren

Eine Kundenverwaltung hat teilweise rechtliche Anforderungen.
Da mit Copy Paste zu basteln ist sehr mutig; auch von Deinem Chef - schließlich geht es hierbei um den Kern einer Firma: Kunden.

Und nein, auch als Anfänger is das nicht normal.
Die erfolgreichen Anfänger gehen i.d.R. strukturiert an die Sache und investieren auch mal ein bisschen eigene Zeit in die Skills.
Du lernst hier für Dich - nicht für uns.

X
xKushGene Themenstarter:in
91 Beiträge seit 2017
vor 7 Jahren

Naja er kann die Kunden dann einfach nur in eine Liste eintragen und halt sehen "ah der hat noch einen Auftrag offen, hätte ich doch fast vergessen".

Auftrag fertig:
"Ah, da ist ja der Kunde mal schauen wie ist die telefonnummer, ah da ist sie, mal eben anrufen um bescheid zu geben, dass der PC wieder abgeholt werden kann".

Mehr ist es auch nicht.
Das programm ist nicht total wichtig sage ich mal und wenn das Programm kaputt geht ist die Firma dahin. Bisher macht er das alles in Excel.

16.806 Beiträge seit 2008
vor 7 Jahren

Ändert an der Tatsache nichts, dass Du viel schneller voran kommen wirstst, wenn Du nicht wegen jeder Lappalie Google oder ein Forum fragen musst.
Man kommt einfach mit einer Zeitinvestition eines Wochenendes in Zukunft so viel schneller voran, dass man die Zeit schnell eingeholt hat.

X
xKushGene Themenstarter:in
91 Beiträge seit 2017
vor 7 Jahren

Das heißt, ich soll jetzt das Programm einfach links liegen lassen, meinem Chef sagen "ja ich möchte gerne lernen und kann das Programm nicht weiter machen"

Wie auch immer er darauf reagieren wird.

Und dann jeden Tag das Visual C# 2012 von Andreas Kühnel Buch lesen und mir die Grundlagen beibringen.

So würde ich das jetzt machen wollen. Nur wenn ich das Buch jetzt durchgehe, weiß ich evtl. am ende des Buches nicht mehr, wie es am Anfang des Buches war, weil ich alles schnell durchgegangen bin, da ich das Ziel vor Augen habe schnell wieder am Programm arbeiten zu können um meinem Chef Ergebnisse meines daseins zu geben.

16.806 Beiträge seit 2008
vor 7 Jahren

Naja, was erwartest jetzt?

Wir haben Dir hier die Problematik und die Lösung Deines Codes gesagt: Du musst ihn anders umsetzen, sonst funktioniert Dein Vorhaben nicht. Dabei auf die OOP Grundlagen verwiesen, mit dem das Ziel erreicht wird.

Du hast also eine entsprechende Antwort zu Deiner Frage hier bekommen.
Das Problem: Dir fehlen die Fähigkeiten, da Du nicht bereit bist, Dich mit den Grundlagen zu befassen.
Du willst eine fertige Lösung; denn wie gesagt: die Antwort zum Problem hast Du.

Das heisst, es müsste Dir also jemand aus dem Forum den Code schreiben; quasi Dein kostenfreier Arbeiter sein.
Wenn das jemand macht: okay - ich würde es nicht machen. Davon abgesehen verletzt es die Forenregeln, da das Forum kein Copy-Paste-Generator ist.
[Hinweis] Wie poste ich richtig? 4. Verlangt keine fertigen Lösungen

In der Zeit hier, die Du mit diskutieren verbracht hast, hättest Du schon die ersten drei Kapitel der OOP Grundlagen durchgemacht.
Bitte in Zukunft an die Forenregeln halten, ansonsten machen wir halt einfach die Themen zu; denn die Regeln hier sind klar.

709 Beiträge seit 2008
vor 7 Jahren

Dann setz dich nach Feierabend und am Wochenende hin.
In meinen Augen ist es nicht nur wichtig ein Buch zu lesen, sondern das Gelesene auch kurz auszuprobieren und mit dem Code zu spielen, damit das auch im Kopf hängen bleibt.
Nur lesen alleine bringt nichts - man muss das Gelesene auch umsetzen.

Das fängt z.B. schon bei solchen Sachen, wie private, internal, protected und public an.
Am besten bleibt's hängen, wenn man mal nachsieht, ob man das richtig verstanden hat und versucht die Sachen zu benutzen und die verstandenen Regeln zu brechen. Wenn alles passt, prima! Wenn nicht, hat man beim Experimentieren wahrscheinlich trotzdem wichtige Erkenntnisse gewonnen.

G
17 Beiträge seit 2015
vor 7 Jahren

Hallo,

nur um es gleich am Anfang Klarzustellen:
Alles was dir das Forum bisher geschrieben hat ist Richtig und ich denke genauso. Du solltest dir die Ratschläge und Empfehlungen wirklich zu Herzen nehmen.
Aber, ich betreue z.Z. einen Informatik-Studenten und kann solche Anfänger-Probleme daher verstehen. Du hast ein konkretes Problem geschildert und warst auch auf dem "richtigem" Weg es zu lösen:
Benutze als "globale" Variable eine Member-Variable in deiner Klasse, wie etwa so:


public class DeineKlasse
{
   private List<TextBox> fieldBox; // member variable
   ...
   public void test()
   {
      ...
            foreach (DataRow col in schema.Rows)
            {
                Label[] fieldLabel = new Label[columnNames.Length];
                Panel[] fieldPanel = new Panel[columnNames.Length];

                //TextBox[] fieldBox = new TextBox[columnNames.Length];
                fieldBox = new List<TextBox>(); // Du setzt hier die member variable

                for(int i = 0; i < columnNames.Length; i++)
                {
                    ...
                    // Field Panel TextBox
                    TextBox textBox = new TextBox();
                    textBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    textBox.Location = new Point(124, 3);
                    textBox.Size = new Size(166, 23);
                    textBox.Name = col.Field<String>("ColumnName") + "Box";
                    
                    fieldBox.Add(textBox); // und fügst eine TextBox hinzu

                }

                for(int i = 0; i < 1; i++)
                {
                    ...
                    fieldPanel[i].Controls.Add(fieldBox[i]);
                    ...
                }
            }
        }
}

Deine "Programmierung" wird damit aber auch nicht besser...

M
33 Beiträge seit 2012
vor 7 Jahren

Also wo fange ich an .....

Ohne entsprechende Vorkenntnisse in C# so ein Projekt zu verwirklichen ist einfach nicht "Ergebnis-orientiert", schon gar nicht wenn du das auch noch alleine machen möchtest.

Ich würde sagen du hast folgende Optionen :

A) In C# und OOP einarbeiten = Lesen -> Probieren -> Scheitern -> Nachlesen -> Probieren .......
und dein Chef muss halt warten bis zu soweit bist ( dein Praktikum wird dann schon einige
Monde in der Vergangenheit liegen )

B) Ihr bleibt bei Excel und du machst ein Praktikum wo du auch was beigebracht bekommst

C) Schlag deinem Chef vor eine CRM/WAWI-Software zu nutzen,
bei deren Installation kannst du schon mal sehen was so ein Projekt
am Ende können müsste, kannst bei Konfiguration & Installation ein bisschen Erfahrung
mitnehmen.

Hier könnte man vielleicht auf http://www.cao-faktura.de/produkte/cao-faktura schauen oder https://www.jtl-software.de/Warenwirtschaft-JTL-Wawi um nur zwei zu nennen die es gibt.
Es gibt hinreichend Auswahl -> Google -> suchen : "open source wawi"

Aber auch hier solltest du dich vorher informieren welche zum Unternehmen passt.

D) Wenn von deinem gelernten PHP noch was hochsprudeln sollte, damit kann man eine CRUD - Kundenliste erstellen, aber auch hier gilt Grundlagen sind das "A" und "O".

Wenn du C# lernen willst, bleib am Ball !

mfg
Wasabi

Falls fallend du vom Dach verschwandest, brems bevor du Unten landest.

2.207 Beiträge seit 2011
vor 7 Jahren

Bitte schweift nicht vom Thema ab. Der TS hat die Aufgabe, sich fortzubilden, verstanden denke ich. Bitte weitere Beiträge nur zur Problemlösung, auch wenn dort schon viel gesagt ist.

Für den TS sind die Links: [FAQ] Wie finde ich den Einstieg in C#? [Tipp] Schau in die Doku! - Möglichkeiten der Informationsgewinnung sicherlich interessant

Gruss

Coffeebean

M
368 Beiträge seit 2006
vor 7 Jahren

Also kunden hinzufügen, löschen bearbeiten, Aufträge erstellen, Rechnungen erstellen und drucken.
Das ganze mit den Spalten aus den Datenbank ziehen ist eben dazu da, falls er sag ich mal noch eine Spalte für Fax und Telefon sag ich mal hinzuzufügen, wenn er das denn will. Oder andere Spalten hinzuzufügen/löschen.

Das klingt im Kern nach einer CRUD-Applikation. Einige Videos zum Thema "crud c# windows forms ado.net" unter youtube.com könnten weiterhelfen. "Könnten", weil die Ergebnisse u.U. vom programmiertechnischen Standpunkt Glückssache sind, teilweise 'zu hohe' Dinge enthalten, veraltet sind,... Und eh auf den Einzelfall angepasst werden wollen. Das ändert aber nichts an der bisher geäusserten Kritik.

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉