Objekte/Referenz Problem?!
fresserettich 03.02.2005 - 15:02 498 1
fresserettich
Here to stay
|
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 //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();
wichtig ist auch noch die Methode setMainWindow(): //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);
}
Über diese Methode bekomme ich die Daten bzw. Zugriff auf das DataSet der Hauptform meine Vermutung ist dass irgendwie diese FilterView auch ersetzt wird obwohl FilterView in der klasse als lokale Variable erzeugt wird bzw. dass die gleiche Referenz hat edit:sloved big thx an ringding
Bearbeitet von fresserettich am 03.02.2005, 21:18
|
Ringding
Pilot
|
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.
|