"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Objekte/Referenz Problem?!

fresserettich 03.02.2005 - 15:02 498 1
Posts

fresserettich

Here to stay
Registered: Jul 2002
Location: hier
Posts: 5381
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(); 

wichtig ist auch noch die Methode setMainWindow():
Code: 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);
}
 
Ü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
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz