Laden...

Events

Erstellt von TiTime vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.580 Views
T
TiTime Themenstarter:in
68 Beiträge seit 2006
vor 17 Jahren
Events

Hallo!
Ich kenn mich leider mit der Struktur von Eventhandlern, eventverwaltung nicht so gnaz gut aus. Lediglich wie man sie Anwendet und ein kleines bischen mehr.

Also ich hab da eine Form die sehr sehr sehr viele Events verwendet. Und nach jedem event müsste ich ein Steuerelement "refreshen", weil es als Datasource eine Tabelle hat, die durch events geändert wird.

Nun ist meine Frage, gibt es irgendwo eine Methode, Property oder irgendetwas in der art, der halt Events registriert bzw. mit bekommt das eines ausgelöst wurde, und dem egal ist welche Art von events. So etwas wie einen Observer.

Wozu fragt ihr? ich will an so einer zentallen stelle meine refresh methode aufrufen und nicht am ende jedes Events schreiben. Hier geht es vor allem darum um ändernungen leicht zu bewerkstelligen.

Danke schon mal im vorraus!

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo TiTime,

gibt es irgendwo eine Methode, Property oder irgendetwas in der art, der halt Events registriert bzw. mit bekommt das eines ausgelöst wurde, und dem egal ist welche Art von events.

nein!

herbivore

_
416 Beiträge seit 2005
vor 17 Jahren

Hallo,

wenn du schon eine Tabelle hast, dann häng dich doch einfach an das ListChanged Ereignis, das wäre dann ja die zentrale Stelle. Noch einfacher wär's natürlich DataBinding zu verwenden, dann macht das Framework alles von selbst.

cu, tb

I
1.739 Beiträge seit 2005
vor 17 Jahren

So etwas wie einen Observer

Geht, mit entsprechenden Aufwand.
Allerdings brauchts dafür mehr Details als:

Und nach jedem event müsste ich ein Steuerelement "refreshen", weil es als Datasource eine Tabelle hat, die durch events geändert wird.

Geht ganz einfach, durch Mehrfachregistrierung(Handler) oder die Tabelle selbst wird überwacht.
Bei nem Einzeiler: hastenichjesehen.Refresh(), lohnt sich ersteres nicht.
Der Observeransatz ist schon ok, wobei man sich da aber fragt ob eine Tabelle(Datatable?) nicht eher rückschrittlich ist(einerseits nicht entkoppelt(Daten von Logik) aber nach Entkopplung(GUI) verlangen). Der Observeransatz geht schon(so oder so) . Aber da ein Muster nur ein Muster ist und keine fertige Lösung für jeden Zweck, mehr Details zu Aktualisierungsbedarf(Änderungen können von wievie Elementen von wo kommen) und GUI-kram(Anzeigen).
Ein Observer spart i.Ü. keine Schreibarbeit(nur im WorstCase der Spaghettifactory 😁 ), er entkoppelt nur.

T
TiTime Themenstarter:in
68 Beiträge seit 2006
vor 17 Jahren

Hallo danke für die Antworten!

@tb
das listchange ereignis wäre grundsätzlich eine super idee würde bei mir allerdings nicht funktionieren. Da die Änderungen direkt in der DB passieren. Und die Tabelle für die anzeige die Daten "direkt" aus der DB bezieht. Es besteht quasi eine ständige kommunikation zwischen DB und Applikation.

@ikaros
ja die Tabelle ist eine DataTable. Ich glaub schon dass ich da einen Enkopplungsschritt aufgehoben habe, allerdings weiß ich momentan keine Lösung wie ich mein Problem bewerkstelligen soll. Die trennung ANZEIGE, BUSNISSLOGIC und DATA bekomm ich leider nicht so hin wie ich es mir wünsche. Weil es leider komplizierter ist als es den Anschein hat. Diese Art der Kopplung würde ich ja schon erreichen wenn ich einen DataAdapter und ein DataSet zum Einsatz nehme kann ich aber leider nicht. Weil der Großteil der Daten die angezeigt wird besteht aus dynamischen "joins" d.h. die Tabelle lässt sich nicht direkt auf die DB abbilden.
Das DesignPatterns keine Schreibersparnis sind, ist mir sehr wohl bekannt 😉 Und es ist auch kein Einzeiler. Es ist nur weil man durch entkoppeln meisten auch als Nebeneffekt eine Zentrale stelle erhält.

Aber wie ist das gemeint mit Tabelle beobachten und Merhfachregistrierung?

P
375 Beiträge seit 2005
vor 17 Jahren

Hallo TiTime,

entschuldige bitte das ich einwenig wage bin, aber ich habe mal gelesen, dass wenn du ein SQLServer 2005 benutzt der SQLServer ein Event bereitstellt, der deiner Applikation sagt, dass sich der Inhalt der Tabelle geändert hat.

Das wäre doch genau das Event, was du brauchst um dein Control zu aktuallisieren.

Ich hoffe, ich konnt dir das richtige Stichwort geben.

Pedro

I
1.739 Beiträge seit 2005
vor 17 Jahren

Original von Pedro_15
Hallo TiTime,

entschuldige bitte das ich einwenig wage bin, aber ich habe mal gelesen, dass wenn du ein SQLServer 2005 benutzt der SQLServer ein Event bereitstellt, der deiner Applikation sagt, dass sich der Inhalt der Tabelle geändert hat.

Pedro

Nennt sich wohl NotificationService, und betrifft nicht dieses Problem direkt(in weiteren Ausbaustufen schon möglich).
Das Problem von TiTime betrifft derzeit nur die Daten die im lokalen Speicher sind.

@TiTime:
Es fehlen immer noch ein paar Details. Aber ich werd mal was Zusammenstellen, zur dem was ich angesprochen hab. Das wird aber höchstwahrscheinlich schlecht passen. Magst du eher Codebeispiele oder Diagramme? Text gehört natürlich auch dazu.
Der morgige Tag ist noch nicht verplant, die Chancen stehen gut, ansonsten(falls es nicht klappt) gibts wenigstens ein paar Links.

Vorerst:
"Ich glaub schon dass ich da einen Enkopplungsschritt aufgehoben habe, "
Übersprungen würde ich sagen, und zwar den des BL. Allerdings ist die BL manchmal sehr flach, und wenns dazu noch schnell gehen soll mags auch ok sein.

So wie ichs verstehe ist die BL nicht vorhanden bzw. wird durch die GUI abgedeckt und das schlimmste verhindert die DB. Problem ist einzig und allein das "posten" von Veränderungen an der DataTable an GUI-Elemente zur Aktualisierung.
Falls es ich es missverstanden habe, oder mehr Detailinfos hinzukommen(verbessert Vorschläge) poste es bitte möglichst bald.
hinweis: ich hab vor so gegen 10 aufzustehen 😉 (so als Deadline für mehr Inputs)

T
TiTime Themenstarter:in
68 Beiträge seit 2006
vor 17 Jahren

Hi!

Problem ist einzig und allein das "posten" von Veränderungen an der DataTable an GUI-Elemente zur Aktualisierung.

😁 respekt ikaros. Ich würde sagen du hast mein Problem und mein Design und die Gründe für diese wahl den Nagel voll auf den kopf getroffen. Besser könnte man es gar nicht mehr formulieren. 👍

Aus Zeit Gründen auch rischtisch. Das Programm muss spätestens Do fertig werden. Dann ist "Abgabe" bzw. ist meine Zeit um.

Also Lösungsideen wären dementsprechend sehr nützlich.
Lg TiTime

I
1.739 Beiträge seit 2005
vor 17 Jahren

Habs heut doch nicht mehr geschafft.
(gegen halb 11(nein nicht 5,5) mal reingechaut, bin aber doch das WE nutzen gegangen)

Aus Zeit Gründen auch rischtisch. Das Programm muss spätestens Do fertig werden. Dann ist "Abgabe" bzw. ist meine Zeit um.

Also wird eine simple Lösung bevorzugt.

Würde da die DataTableEvents benutzen(RowChange, ColChange, RowDeleted usw.).

Für ne "richtige" Lösung wahrscheinlich nicht, aber die Aufgabe beschränkt sich wohl nicht Allein darauf.
Das könnte schon die Antwort sein um Controls bei Veränderung der Datenbasis zu benachrichtigen.

Falls nicht hau in die Tasten 😉. Ich schau noch mal rein.
Bei dem Termin würde ich jedenfalls nichts allzukompliziertes versuchen.
Kompliziert ist eine Sache aber nur bis man sie beherrscht, danach nur Basis. Verstehen von irgendwelchen Dingen ist auch gut, aber gibt Prioritäten die besagen, das ein Problem gelöst werden muss(Zeitrahmen, Kosten usw.) egal wie...