URL: https://www.overclockers.at/coding-stuff/objekte_referenz_problem_135974/page_1 - zur Vollversion wechseln!
Habe eine kleine Anwendung in C# (VS 2003) geschrieben die folgendes kann:
ich habe eine reihe von Kunden die Bestellungen und Bestellposten haben können. Wenn ich eine User auswähle (über ein DataGrid) und mir dann seine Bestellungen und dazugehörigen Bestellposten anzeigen lasse kommt eine neue Form (das ganze ist als MDI realisiert) mit 2 DataGrids. In dem einen stehen die Bestellungen und im anderen die Bestellposten dazu.
Die ganze Abwicklung welche Bestellungen genau angezeigt werden sollen sind ein DataView gelöst worden.
So nun zu meinem Problem:
Wenn ich also die Bestellungen eines Kunden anzeigen lassen will funkioniert alles wunderbar. Wenn ich mir dann einen 2ten anzeigen lassen will übernimmt das erste Fenster den Inhalt des 2ten Fensters.
Hier ist mal der code für meinen Button wo das Fenster mit den Bestellungen aufgerufen wird
Code: PHP//FilterView erzeugen für Bestellungen strFilter = new StringBuilder(); strFilter.Append("KundenID = " + System.Convert.ToInt32(userControl11.kundenNr2.Text)); //view Filter generieren viewFilter = new DataView (dataSet11.Bestellungen); viewFilter = dataSet11.Bestellungen.DefaultView; viewFilter.RowFilter = strFilter.ToString(); //DataGrid erzeugen und MainWindow übergeben //damit DataGrid auf DataAdapter zugreifen kann Bestell bestellungen = new Bestell(); bestellungen.setMainWindow(this); bestellungen.MdiParent=this; bestellungen.Text = userControl11.kundenNr2.Text + " " +userControl11.name2.Text +" "+userControl11.vorname2.Text; bestellungen.Show();
Über diese Methode bekomme ich die Daten bzw. Zugriff auf das DataSet der HauptformCode: PHP//alles in Klasse Bestell Form1 mw; DataView FilterView; int kundenID; public void setMainWindow (Form1 mainW) { mw=mainW; FilterView = mw.viewFilter; //Bestellungen setzen dataGrid1.DataSource = FilterView; //kundenID zuweisen kundenID = System.Convert.ToInt32(mw.userControl11.kundenNr2.Text); }
Es wird beide Male das gleiche DataView verwendet. Du erzeugst zwar ein neues, haust aber gleich in der nächsten Zeile die Referenz darauf weg.
In C++ wäre das ein memory leak, in .NET wird's natürlich vom Garbage Collector aufgeräumt. Jedenfalls hast du aber nachher keinen Zugriff mehr und verwendest fröhlich das erste DataView weiter.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026