ich hab da ein kleines Problem mit INotifyPropertyChanged.
Also es geht um eine verteilte Anwendung mit .NET-Remoting als Middleware.
Nun habe ich eine Klasse, deren Objekte ich per Remoting über die Leitung schicke. Solange diese Klasse INotifyPropertyChanged nicht implementiert funktioniert alles wunderbar.
Sobald ich das Interface aber implementiere, wird mir beim Versuch das Objekt mittels Remoting über die Leitung zu schicken folgender Fehler entgegengeworfen:
Fehler
Der Typ "System.ComponentModel.ReflectPropertyDescriptor" in Assembly "System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ist nicht als serialisierbar gekennzeichnet.
Allerdings habe ich bis zu diesem Moment keine Handler dem PropertyChanged-Event des Objekts hinzugefügt. Also wüsste ich nicht, warum da irgendwas dranhängen sollte.
auf dem beigefügten Bild sieht man, dass es 2 Arten von Reservierungen gibt und 2 Arten von Klassen, die jeweils eine Reservierungsliste als Member besitzen.
Nun würde ich es gerne so haben, dass beim Zugriff auf die Liste sich je nach Vererbungsebene ein anderer Typ als Listenelement präsentiert.
Also wenn ich auf eine Instanz von "BasisKlasse" zugreife, dann soll die Liste als List<Reservierung> "sichtbar" sein. Wenn ich aber auf eine Instanz von "SpezielleKlasse" zugreife, dann sollen die Listenelemente vom Typ "SpezielleReservierung" sein.
Ist das per Vererbung überhaupt möglich? Ich verwende .NET 3.5.
Ist es nicht so, dass du (je nach verwendetem Bereich) genau weisst welches Interface in Frage kommt? Wenn ja, dann kannst du ja versuchen das Objekt in diesen "Interface-Typ" zu casten und anschließend darauf "IsValid" aufrufen.
Wobei ein DownCast natürlich nicht so schön ist, wie wenn es sich durch ein anderes Objektmodel rein durch Polymorphismus lösen lassen würde.
also vorweg... wenn eine Klasse ein Interface implementiert, dann implementiert eine Instanz dieser Klasse das Interface zu genüge. :-)
Kannst du deine Abfrage auf Gültigkeit nicht allgemeiner halten? Z.B. eine Methode "IsValid() --> {true, false} einführen? Die könntest du dann ja in einem "Basisinterface" verankern.
ich lade dynamische Daten auch erst "nach dem Konstruktor". Da ich im Konstruktor nicht testen kann, ob sich das Control gerade im Design-Mode befindet oder nicht.
Hi, also meine letzte Vorgehensweise war so, dass ich ein Screenshot der Clientarea geschossen hab und diesen innerhalb einer PictureBox (Dock.Fill) angezeigt hab. Dann habe ich im Paint-Eventhandler der PictureBox noch ein halbtransparentes Rechteck über die komplette PictureBox gezeichnet.
Geht bestimmt eleganter, doch es funktioniert hier in der Software und sieht gut aus. :-)
Ich gehe mal davon aus das deine DataSource ein DataTable-Objekt ist. Wenn das so ist, dann kannst du ja einfach den gewünschten Datensatz per DataTable.Select() "auswählen" und dir aus der gefundenen DataRow den Wert ziehen.
Wenn du nur einen Wert aus der DB holen möchtest, dann erstelle dir halt das passende SQL und frag die Daten per IDataReader ab.
überfordert mich gerade. :-) Meinst du vielleicht Zeile 2, spalte 6? Wobei du dann natürlich über den PK deiner Tabelle gehen musst, um einen bestimmten Datensatz auszuwählen.
bevor man über soetwas nachdenkt, sollte man immer erst am Algorithmus "schrauben" finde ich. Wenn die Komplexität "zu hoch" ist, dann bringt einem auch mehr Rechenleistung nichts, da diese nichts am eigentlichen Laufzeit-Wachstumsverhalten ändert.
ich musste gerade zum ersten mal feststellen, dass wenn ich ein UserControl mit einer Eigenschaft A habe, ich dann kein Event im UserControl definieren darf das AChanged heisst.
Dann funktioniert kein DataBinding an Eigenschaft A mehr! Sobal ich das Event zum Beispiel auf myAChanged umbenenne, funktioniert das DataBinding wieder.
Bilde ich mir das gerade nur ein oder darf man dann wirklich den Namen des Events nicht so wählen wie ich es gemacht habe?
Und irgendwann gibt es eine COMException und es wird wieder versucht eine Verbindung aufzubauen... Es gibt dann wieder eine COMException und es wird wieder versucht eine Verbindung aufzubauen.... Es gibt dann wieder.......
ich habe zur Zeit ein Problem, bei dem ich nicht mehr weiter weiß. Also ich arbeite mit der XtraReports-Suite von DevExpress, aber das sollte nichts ausmachen. :-)
Es geht darum, das ich folgende Exception bekomme, doch mein Kollege nicht. Obwohl wir denselben Code laufen lassen. Also muss ich mir irgendwie das System versaut haben. Naja, hier mal die Exception:
Fehler
BindingFailure was detected
Message: Die Assembly mit dem Anzeigenamen "System" konnte im "Load"-Bindungskontext der AppDomain mit ID 1 nicht geladen werden. Fehlerursache: System.IO.FileNotFoundException: Die Datei oder Assembly "System" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.
Dateiname: "System"
=== Zustandsinformationen vor Bindung ===
LOG: Benutzer = xxx\yyy
LOG: DisplayName = System
(Partial)
LOG: Appbase = file:///C:/V4.NETDEV/Client/bin/x86/Debug/
LOG: Ursprünglicher PrivatePath = NULL
Aufruf von Assembly : DevExpress.XtraReports.v10.2.Extensions, Version=10.2.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a.
===
LOG: Diese Bindung startet im default-Load-Kontext.
LOG: Die Anwendungskonfigurationsdatei wird verwendet: C:\V4.NETDEV\Client\bin\x86\Debug\Client.vshost.exe.Config
LOG: Die Computerkonfigurationsdatei von C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config wird verwendet.
LOG: Die Richtlinie wird derzeit nicht auf den Verweis angewendet (private, benutzerdefinierte, teilweise oder pfadbasierte Assemblybindung)
LOG: Download von neuem URL file:///C:/V4.NETDEV/Client/bin/x86/Debug/System.DLL.
LOG: Download von neuem URL file:///C:/V4.NETDEV/Client/bin/x86/Debug/System/System.DLL.
LOG: Download von neuem URL file:///C:/V4.NETDEV/Client/bin/x86/Debug/System.EXE.
LOG: Download von neuem URL file:///C:/V4.NETDEV/Client/bin/x86/Debug/System/System.EXE.
Ansich ist die Fehlermeldung natürlich klar. Er findet halt die Datei(en) nicht. Doch weshalb sucht er eine SYSTEM.DLL in meinem Anwendungsordner!?! 8o
Wenn Du von Addition sprichst, gehe ich davon aus, dass Du einen vorhandenen Datensatz aktualisieren möchtest und innerhalb der betroffenen Tabelle gibt es eine Spalte, deren Wert sich nun folgendermaßen ergibt: "neuer Wert" = "alter Wert" + "Konstante", richtig?