Mytoserus Geschrieben 3. September 2009 Teilen Geschrieben 3. September 2009 Hallo Ich habe folgendes Problem. Ich habe ein Projekt mit zwei Forms. In der ersten Form im Form_load Erreignis habe ich eine DatenBankausgabe mittels Gridview in der zweiten kann ich sie Administrieren. Wenn ich auf der Form 2 auf speichern gehe will ich das die Ausgaben auf Form 1 die neuen Eintragungen beinhalten ohne Aktualisieren Button auf Form 1 also ein Form1 Load ereignis starten mit speichern auf Form 2. Hat jemand ne Idee? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gateway_man Geschrieben 3. September 2009 Teilen Geschrieben 3. September 2009 Vorab welche sprache? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.NETter Geschrieben 3. September 2009 Teilen Geschrieben 3. September 2009 Hallo, eigentlich könnte man Daten auch in einer einzigen Form ansehen und auch manipulieren. Aber ich kennen ja auch die Anforderungen nicht. In diesem Fall muss Form1 auf die Aktualisierung von Form2 reagieren. Also sobald in Form2 ein Datensatz hinzugefügt wird soll sich Form1 aktualisieren. Prinzipiell weiß Form1 nicht was Form2 so treibt. Form2 muss also ein Event auslösen und Form1 muss darauf reagieren. In Form2 muss muss ein Delegate (typensicherer Funktionszeiger) erstellt werden. Danach wird ein Event vom Typ des Delegates erzeugt. Siehe: public partial class Form2 : Form { public delegate void Aktualisiert_EventHandler(object sender, EventArgs e); public event Aktualisiert_EventHandler AKTUALISIERT; Damit kann Form2 ein Event auslösen. Zum Beispiel beim Click auf einen Button.Das sieht dann so aus: private void cmdSave_Click(object sender, EventArgs e) { //Code zum aktualisieren der DB.. //Jetzt wird das Event ausgelöst AKTUALISIERT(this, EventArgs.Empty); } Jetzt muss Form1 nur noch drauf reagieren können und zwar mit einem Eventhandler. Form2 wird in Form1 instanziert und durch einen Buttonclick angezeigt. public partial class Form1 : Form { Form2 frm2 = new Form2(); public Form1() { InitializeComponent(); //Hier wird der Eventhandler hinzugefügt frm2.AKTUALISIERT += new Form2.Aktualisiert_EventHandler(frm2_AKTUALISIERT); } void frm2_AKTUALISIERT(object sender, EventArgs e) { //Code zur Aktualisierung von Form1 } private void cmdNeuerDatensatz_Click(object sender, EventArgs e) { frm2.Show(); } } Hoffe das hilft Dir weiter! Gruß, Thomas Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gateway_man Geschrieben 3. September 2009 Teilen Geschrieben 3. September 2009 Stichwort Globale Variablen. Du könntest einfach den Datatable der dir beim ersten gridview als datasource dient, global deklarieren, diesen dann noch im ersten form befüllen lassen und dann ganz einfach im 2 Form auf die variable die deinen datatable vertritt zugreifen.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0815FIA Geschrieben 4. September 2009 Teilen Geschrieben 4. September 2009 Hm, globale Variablen stinken. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
streffin Geschrieben 4. September 2009 Teilen Geschrieben 4. September 2009 von globalen Variablen sollte man imo nur dann gebrauch machen wenn das wirklich global ist, was weis ich, nen Username oder sowas. Das gefährliche an globals ist dass man damit verdammt schnell, verdammt hässliche Seiteneffekte haben kann und wird, wenn das Projekt mal etwas grösser wird. Ich benutz die daher auch fast ausschlieslich für konstante Werte. Und Form1 durch ein Event auf Form2 reagieren lassen ist verdammt einfach. Du rufst einfach im Eventhandler auf Form2 (da wo was passieren soll mit Form1) die entsprechende Methode auf Form1 auf. Das ist nen einfaches Form1.machwas(). Und so wie sich der Fall für mich gerade anhört, dass du die Daten im Form_load aktualisierst : form1.reload() Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.NETter Geschrieben 5. September 2009 Teilen Geschrieben 5. September 2009 Globale Variablen... die sollte man wirklich nie benutzen und wie ich weiter oben geschrieben habe solche Dinge mit einem Eventhandler abfangen. Aber bitte, bitte, bitte dies mit einem "expliziten Eventhandler"! abfangen. Im FormLoad() kann viel drin stehen, was dann auch alles mit ausgeführt wird und was noch viel wichtiger ist... Was passiert wenn ich die Signatur des Events verändere und zum Beispiel noch einen String übergeben möchte? public delegate void Aktualisiert_EventHandler(object sender, EventArgs e, string returnString); public event Aktualisiert_EventHandler AKTUALISIERT; Dann hagelt es Fehler bei der Erstellung weil Form1_Load() private void Form1_Load(object sender, EventArgs e) nicht mehr die korrekte Signatur besitzt. Und wenn man hier mit Multuthreading arbeitet hat man bei globalen Variablen (die es in C# garnicht gibt ) ruckzuck einen Deadlock. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.