Laden...

Änderungen im Form erkennen: Pattern?

Erstellt von sl3dg3hamm3r vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.930 Views
sl3dg3hamm3r Themenstarter:in
119 Beiträge seit 2007
vor 15 Jahren
Änderungen im Form erkennen: Pattern?

Hallo miteinander

Das Problem scheint mir trivial, dennoch bin ich mir nicht sicher wie es korrekt gelöst wird.

Ich habe eine ListBox, welche über eine BindingSource mit einer DataTable verknüpft ist. Daneben ein Textfeld, welches den Titel des selektierten Items der ListBox anzeigt, auch über ein Binding. (In Tat und Wahrheit habe ich noch viele Eingabefelder mehr: Combo-Boxen, Checks...)

Mein Ziel: Wenn der Benutzer etwas in das Textfeld reinschreibt, und anschliessend ein anderes Item in der ListBox selektiert, ohne vorher gespeichert zu haben, soll eine Warnmeldung erscheinen ("Eingaben verwerfen? Ja|Nein").

Ist es nun so, dass ich für das Textfeld den KeyDown-Event abonnieren muss (z.Bsp. den bool dataChanged auf true setzen), und anschliessend bei der ListBox ebenfalls einen MouseEvent, wo ich dann überprüfe, ob dataChanged true ist? Und in dem Fall die MessageBox generieren würde?

Für ein Eingabefeld wie oben geschildert geht das ja, aber bei >10 Felder scheint es mir dann doch einigermassen umständlich, für jedes einzelne einen Event zu abonnieren.

Geht das eleganter?

Grüsse
Sl3dg3

1.696 Beiträge seit 2006
vor 15 Jahren

Hallo sl3dg3hamm3r,

ich würde sagen, dass du schon die Events für jedes einzelnen Eingabefeld abonieren mußt, aber nur einen EventHandler für alle EingabefeldEvents, der lediglich die bool'sche Variable umsetzt.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

sl3dg3hamm3r Themenstarter:in
119 Beiträge seit 2007
vor 15 Jahren

hmmm ok. Ich hab mir überlegt, ob ich ev. bloss auf DataTable etwas abonnieren könnte, aber bei sowas wie RowChanged ist es jeweils bereits zu spät.

Was mir noch ein bisschen Kopfzerbrechen bereitet sind die Comboboxen. Ich weiss nicht wie ich zuverlässig merken kann, ob der Inhalt geändert hat. MyCbo.SelectedIndexChanged taugt da nicht viel, da dieser auch beim selektieren eines Items aus der Liste gefeuert würde (durch die Bindings). Mouse-Event könnte man abfragen, aber da weiss man letztendlich ja nicht, ob der Benutzer auch tatsächlich ein neues Item aus der Combo ausgewählt hat....

Grüsse
Sl3dg3

104 Beiträge seit 2004
vor 15 Jahren

Hallo sl3dg3hamm3r,

was spricht denn gegen das SelectedValueChanged-Event der ListBox?

Mal davon abgesehen, wieso willst du die Änderung verwerfen wenn der Benutzer ein anderes Item auswählt? Die Eingabe sollte doch über DataBinding direkt in deinem Datenmodel gespeichert werden. Diese dauernden MsgBoxen fände ich als Anwender vermutlich etwas nervig ^^.

Schöne grüße,

Tachyon

Schaut mal im IRC vorbei:
Server: irc.euirc.net
Channel: #C#

4.221 Beiträge seit 2005
vor 15 Jahren

DataTable.HasChanges schon probiert.

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

sl3dg3hamm3r Themenstarter:in
119 Beiträge seit 2007
vor 15 Jahren

Mal davon abgesehen, wieso willst du die Änderung verwerfen wenn der Benutzer ein anderes Item auswählt?

Da hast du recht, aber ich denke es kommt auch etwas auf den Anwendungsfall an. Wenn 50 Benutzer gleichzeitig auf derselben Table herumeditieren, denke ich ist die Variante, Records einzeln zu speichern, einfacher zu handhaben.

DataTable.HasChanges schon probiert

Stimmt, dann könnte ich ev. sogar das boolean weglassen...

sl3dg3hamm3r Themenstarter:in
119 Beiträge seit 2007
vor 15 Jahren

DataTable.HasChanges schon probiert.

HasChanges existiert nur in DataSet. Versteh nicht wieso es das nicht auch für DataTable gibt?

104 Beiträge seit 2004
vor 15 Jahren
Hallo

Hallo

Vielleicht hilft dir folgender Artikel indirekt weiter: Schau in die Doku! - Möglichkeiten der Informationsgewinnung

Grüße

Schaut mal im IRC vorbei:
Server: irc.euirc.net
Channel: #C#

4.221 Beiträge seit 2005
vor 15 Jahren

Stimmt gibt es auf DataTable nicht ...

Auf der DataRow gibt es ein HasVersion... ev. kannst Du ja damit was basteln.

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

sl3dg3hamm3r Themenstarter:in
119 Beiträge seit 2007
vor 15 Jahren

Vielleicht hilft dir folgender Artikel indirekt weiter:
>

Werd ich gern mal durcharbeiten, guter Artikel...

5.299 Beiträge seit 2008
vor 15 Jahren

Ich habe eine ListBox, welche über eine BindingSource mit einer DataTable verknüpft ist. Daneben ein Textfeld, welches den Titel des selektierten Items der ListBox anzeigt, auch über ein Binding. (In Tat und Wahrheit habe ich noch viele Eingabefelder mehr: Combo-Boxen, Checks...)

Mein Ziel: Wenn der Benutzer etwas in das Textfeld reinschreibt, und anschliessend ein anderes Item in der ListBox selektiert, ohne vorher gespeichert zu haben, soll eine Warnmeldung erscheinen ("Eingaben verwerfen? Ja|Nein").

Du könntest ein Validating-Event verwenden.
Nämlich das des Panels, auf dem alle deine Controls, mit Ausnahme der Listbox, drauf sind.

Um ein neues ListboxItem anzuwählen muß das Panel verlassen werden, und das ist grade gut für eine Abfrage: "Übernehmen/Verwerfen?".

Übernehmen/Verwerfen ist übrigens mit je einer Zeile umgesetzt: Bindingsource.EndEdit()/CancelEdit()

Tatsächlich musst du ja nur im Verwerfungsfall Canceln, denn im NormalFall wird EndEdit ja automatisch durchgeführt.

Der frühe Apfel fängt den Wurm.

sl3dg3hamm3r Themenstarter:in
119 Beiträge seit 2007
vor 15 Jahren

Toller Gedanke, das werde ich so gleich mal ausprobieren... danke.