{"id":55000176,"date":"2019-04-01T00:00:00","date_gmt":"2020-03-27T19:37:29","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=176"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Aenderungen_erkennen_und_verwerfen","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/","title":{"rendered":"&Auml;nderungen erkennen und verwerfen"},"content":{"rendered":"<p class=\"image\">\n<p><b>Unter Access k&ouml;nnen Sie beispielsweise mit der Escape-Taste die aktuellen ungespeicherten &Auml;nderungen an einem Datensatz verwerfen. Das Formular zeigt dann direkt die Daten an, die beim letzten Speichern in den gebundenen Feldern enthalten waren. Dieses Verhalten wollen wir auch f&uuml;r Fenster abbilden, die an ein Element gebunden sind und die Daten in einer Detailansicht anzeigen. Wir wollen erkennen, ob der Benutzer &Auml;nderungen an einem Datensatz vorgenommen hat und in Abh&auml;ngigkeit davon eine R&uuml;ckg&auml;ngig-Schaltfl&auml;che aktivieren oder deaktivieren. Durch einen Klick auf die Schaltfl&auml;che sollen die vorherigen Werte wiederhergestellt werden. Wie das gelingt, zeigt der vorliegende Beitrag.<\/b><\/p>\n<p>Ein WPF-Fenster bietet nicht automatisch eine <b>Dirty<\/b>-Eigenschaft wie ein gebundenes Access-Formular. Eine solche Funktion m&uuml;ssen wir selbst zu einem Fenster hinzuf&uuml;gen. Das Ergebnis dieses Artikels soll etwa wie in Bild 1 aussehen. Das &Auml;ndern eines Eintrags und das Verlassen dieses Eintrags sollen daf&uuml;r sorgen, dass die <b>R&uuml;ckg&auml;ngig<\/b>-Schaltfl&auml;che aktiviert wird.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_176_001.png\" alt=\"Aktivieren der Abbrechen-Schaltfl&auml;che nach einer &Auml;nderung\" width=\"649,559\" height=\"289,9355\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Aktivieren der Abbrechen-Schaltfl&auml;che nach einer &Auml;nderung<\/span><\/b><\/p>\n<p>Bet&auml;tigt der Benutzer dann die <b>R&uuml;ckg&auml;ngig<\/b>-Schaltfl&auml;che, soll der Datensatz auf die Version beim Laden zur&uuml;ckgesetzt werden (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_176_002.png\" alt=\"Zur&uuml;cksetzen des Datensatzes nach Bet&auml;tigen der Abbrechen-Schaltfl&auml;che\" width=\"649,559\" height=\"296,6143\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Zur&uuml;cksetzen des Datensatzes nach Bet&auml;tigen der Abbrechen-Schaltfl&auml;che<\/span><\/b><\/p>\n<h2>Vorbereitung<\/h2>\n<p>Wir nutzen wieder eine Anwendung auf Basis der Vorlage <b>Visual Basic|Windows Desktop|WPF-App (.NET Framework)<\/b>. Dieser f&uuml;gen wir ein neues Element des Typs <b>ADO.NET Entity Data Model <\/b>hinzu und legen f&uuml;r dieses den Namen <b>BestellverwaltungContext <\/b>fest. Dann f&uuml;gen wir mit den Methoden der Datenbankdatei <b>AccessZuWPFFormulare.accdb <\/b>(siehe dortigen Readme-Bericht) ein Fenster auf Basis des Formulars <b>frmKundendetails <\/b>hinzu. Der Entwurf dieses Fensters sieht anschlie&szlig;end wie in Bild 3 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_176_003.png\" alt=\"Entwurf des Fensters frmKundendetails\" width=\"399,7285\" height=\"366,7509\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Entwurf des Fensters frmKundendetails<\/span><\/b><\/p>\n<p>Nun wollen wir erreichen, dass die <b>R&uuml;ckg&auml;ngig<\/b>-Schaltfl&auml;che beim Anzeigen des Fensters deaktiviert ist und erst aktiviert wird, wenn der Benutzer bei mindestens einem Feld eine &Auml;nderung vorgenommen hat. Wenn der Benutzer die dann aktivierte Schaltfl&auml;che <b>R&uuml;ckg&auml;ngig<\/b> bet&auml;tigt, sollen die &Auml;nderungen r&uuml;ckg&auml;ngig gemacht werden beziehungsweise die Werte zum Zeitpunkt des &Ouml;ffnens des Fensters wieder eingestellt werden.<\/p>\n<h2>Speichern beim Schlie&szlig;en<\/h2>\n<p>Wir beginnen mit den einfachen Teil: Die Schaltfl&auml;che <b>btnOK <\/b>soll den ge&auml;nderten Datensatz in die Datenbank &uuml;bertragen. Das erledigen wir mit der folgenden Erg&auml;nzung der Ereignismethode <b>btnOK_Click<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdOK_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     dbContext.SaveChanges()\r\n     Close()\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Ereignis beim &Auml;ndern ausl&ouml;sen<\/h2>\n<p>Dann wollen wir ein Ereignis finden, das durch das &Auml;ndern eines Eintrags und das Verlassen des Feldes ausgel&ouml;st wird. Das scheint uns ausreichend zu sein &#8211; wir m&uuml;ssen ja nicht nach der Eingabe eines jeden Buchstaben pr&uuml;fen, ob sich etwas ge&auml;ndert hat. Der erste Kandidat f&uuml;r eine passende Ereignismethode hei&szlig;t <b>LostFocus<\/b>. Also f&uuml;gen wir das Attribut zum XAML-Code hinzu.<\/p>\n<pre>&lt;TextBox x:Name=\"txtFirma\" Text=\"{Binding Kunde.Firma}\" Height=\"21\" Margin=\"118,31,0,0\" Width=\"221\" LostFocus=\"txtFirma_LostFocus\"\/&gt;<\/pre>\n<p>Wenn wir <b>LostFocus=&#8221; <\/b>eingeben und dann die Tabulator-Taste bet&auml;tigen, wird automatisch der Methodenname <b>txtFirma_LostFocus <\/b>vorgeschlagen. Durch Bet&auml;tigen von <b>F12 <\/b>landen wir dann direkt bei dieser Methode im Code behind-Modul.<\/p>\n<p>Mit der folgenden Testanweisung k&ouml;nnen wir gleich nach dem Starten der Anwendung testen, ob das Verlassen des Textfeldes <b>txtFirma <\/b>das Ereignis ausl&ouml;st:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtFirma_LostFocus(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     MessageBox.Show(\"LostFocus\")\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Herausfinden, ob eine &Auml;nderung vorliegt<\/h2>\n<p>Dieser Ereignismethode wollen wir nun Code hinzuf&uuml;gen, mit dem wir pr&uuml;fen k&ouml;nnen, ob eine &Auml;nderung im aktuell angezeigten Element des Typs <b>Kunde <\/b>vorliegt.<\/p>\n<p>Dazu ben&ouml;tigen wir zun&auml;chst einen Verweis auf den Namespace <b>System.Data.Entity.Infrastructure<\/b>, den wir im Kopf des Code behind-Moduls einf&uuml;gen. <b>System.Data.Entity <\/b>ben&ouml;tigen wir sp&auml;ter auch noch:<\/p>\n<pre>Imports System.Data.Entity.Infrastructure\r\nImports System.Data.Entity<\/pre>\n<p>Danach erweitern wir die Ereignismethode wie folgt: Wir f&uuml;gen eine Variable des Typs <b>DbEntityEntry <\/b>namens <b>GeaendertesElement <\/b>hinzu. Dieses f&uuml;llen wir &uuml;ber die Auflistung <b>Entries <\/b>des <b>ChangeTracker<\/b>-Objekts, das dem aktuell in Kunde gespeicherten Element entspricht. Dieser Auflistung entnehmen wir mit der <b>First<\/b>-Eigenschaft das erste und einzige Element. Dann geben wir in einer weiteren <b>MessageBox <\/b>den aktuellen Zustand dieses Elements aus, den wir &uuml;ber die Eigenschaft <b>State <\/b>ermitteln:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtFirma_LostFocus(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>GeaendertesElement<span style=\"color:blue;\"> As <\/span>DbEntityEntry\r\n     GeaendertesElement = dbContext.ChangeTracker.Entries().Where(Function(x) x.Entity Is Kunde).First()\r\n     MessageBox.Show(\"Element ge&auml;ndert \" + GeaendertesElement.State.ToString())\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis sieht wie in Bild 4 aus. Der Zustand <b>Unchanged <\/b>entspricht nun nicht dem, was wir erwartet haben.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_176_005.png\" alt=\"Aktueller Zustand des Elements\" width=\"449,6946\" height=\"325,4846\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Aktueller Zustand des Elements<\/span><\/b><\/p>\n<p>Erst, wenn wir zum ge&auml;nderten Datensatz zur&uuml;ckwechseln und dann erneut das Ereignis <b>LostFocus <\/b>ausl&ouml;sen, erscheint der Wert <b>Modified <\/b>im Meldungsfenster (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_176_004.png\" alt=\"Aktueller Zustand des Elements, diesmal ge&auml;ndert\" width=\"449,6946\" height=\"316,0504\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Aktueller Zustand des Elements, diesmal ge&auml;ndert<\/span><\/b><\/p>\n<p>Offensichtlich ist der neue Wert im zugrundeliegenden Element <b>Kunde <\/b>beim Ausl&ouml;sen des <b>LostFocus<\/b>-Ereignisses noch nicht angekommen.<\/p>\n<p>Also ist <b>LostFocus <\/b>wohl nicht unser Ereignis. Dementsprechend kommen wir auch mit einem Ereignis wie <b>TextChanged <\/b>nicht weiter, denn m&ouml;glicherweise ben&ouml;tigen wir einen abgeschlossenen Fokuswechsel, um die &Auml;nderung in das <b>Kunde<\/b>-Element zu &uuml;bertragen.<\/p>\n<h2>&Auml;nderung nach Fokuserhalt<\/h2>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000\"><a style=\"color: #ff0000\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000176\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000176?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000176\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"9e1c9c9e66\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unter Access k&ouml;nnen Sie beispielsweise mit der Escape die aktuellen ungespeicherten &Auml;nderungen an einem Datensatz verwerfen. Das Formular zeigt dann direkt die Daten an, die beim letzten Speichern in den gebundenen Feldern enthalten waren. Dieses Verhalten wollen wir auch f&uuml;r Fenster abbilden, die an ein Element gebunden sind und die Daten in einer Detailansicht anzeigen. Wir wollen erkennen, ob der Benutzer &Auml;nderungen an einem Datensatz vorgenommen hat und in Abh&auml;ngigkeit davon eine R&uuml;ckg&auml;ngig-Schaltfl&auml;che aktivieren oder deaktivieren. Durch einen Klick auf die Schaltfl&auml;che sollen die vorherigen Werte wiederhergestellt werden. Wie das gelingt, zeigt der vorliegende Beitrag.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66022019,662019,44000002],"tags":[],"yst_prominent_words":[],"class_list":["post-55000176","post","type-post","status-publish","format-standard","hentry","category-66022019","category-662019","category-Benutzeroberflaeche_mit_WPF"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"Unter Access k\u00f6nnen Sie beispielsweise mit der Escape die aktuellen ungespeicherten \u00c4nderungen an einem Datensatz verwerfen. Das Formular zeigt dann direkt die Daten an, die beim letzten Speichern in den gebundenen Feldern enthalten waren. Dieses Verhalten wollen wir auch f\u00fcr Fenster abbilden, die an ein Element gebunden sind und die Daten in einer Detailansicht anzeigen. Wir wollen erkennen, ob der Benutzer \u00c4nderungen an einem Datensatz vorgenommen hat und in Abh\u00e4ngigkeit davon eine R\u00fcckg\u00e4ngig-Schaltfl\u00e4che aktivieren oder deaktivieren. Durch einen Klick auf die Schaltfl\u00e4che sollen die vorherigen Werte wiederhergestellt werden. Wie das gelingt, zeigt der vorliegende Beitrag.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Andr\u00e9 Minhorst\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Visual Basic Entwickler - Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\u00c4nderungen erkennen und verwerfen - Visual Basic Entwickler\" \/>\n\t\t<meta property=\"og:description\" content=\"Unter Access k\u00f6nnen Sie beispielsweise mit der Escape die aktuellen ungespeicherten \u00c4nderungen an einem Datensatz verwerfen. Das Formular zeigt dann direkt die Daten an, die beim letzten Speichern in den gebundenen Feldern enthalten waren. Dieses Verhalten wollen wir auch f\u00fcr Fenster abbilden, die an ein Element gebunden sind und die Daten in einer Detailansicht anzeigen. Wir wollen erkennen, ob der Benutzer \u00c4nderungen an einem Datensatz vorgenommen hat und in Abh\u00e4ngigkeit davon eine R\u00fcckg\u00e4ngig-Schaltfl\u00e4che aktivieren oder deaktivieren. Durch einen Klick auf die Schaltfl\u00e4che sollen die vorherigen Werte wiederhergestellt werden. Wie das gelingt, zeigt der vorliegende Beitrag.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-27T19:37:29+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"-001-11-30T00:00:00+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"\u00c4nderungen erkennen und verwerfen - Visual Basic Entwickler\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Unter Access k\u00f6nnen Sie beispielsweise mit der Escape die aktuellen ungespeicherten \u00c4nderungen an einem Datensatz verwerfen. Das Formular zeigt dann direkt die Daten an, die beim letzten Speichern in den gebundenen Feldern enthalten waren. Dieses Verhalten wollen wir auch f\u00fcr Fenster abbilden, die an ein Element gebunden sind und die Daten in einer Detailansicht anzeigen. Wir wollen erkennen, ob der Benutzer \u00c4nderungen an einem Datensatz vorgenommen hat und in Abh\u00e4ngigkeit davon eine R\u00fcckg\u00e4ngig-Schaltfl\u00e4che aktivieren oder deaktivieren. Durch einen Klick auf die Schaltfl\u00e4che sollen die vorherigen Werte wiederhergestellt werden. Wie das gelingt, zeigt der vorliegende Beitrag.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Aenderungen_erkennen_und_verwerfen\\\/#blogposting\",\"name\":\"\\u00c4nderungen erkennen und verwerfen - Visual Basic Entwickler\",\"headline\":\"&Auml;nderungen erkennen und verwerfen\",\"author\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"..\\\/fileadmin\\\/_temp_\\\/2019_02\\\/pic_176_001.png\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Aenderungen_erkennen_und_verwerfen\\\/#articleImage\"},\"datePublished\":\"2019-04-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"inLanguage\":\"de-DE\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Aenderungen_erkennen_und_verwerfen\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Aenderungen_erkennen_und_verwerfen\\\/#webpage\"},\"articleSection\":\"2\\\/2019, 2019, Benutzeroberfl\\u00e4che mit WPF\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Aenderungen_erkennen_und_verwerfen\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vbentwickler.de\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2019\\\/#listItem\",\"name\":\"2019\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2019\\\/#listItem\",\"position\":2,\"name\":\"2019\",\"item\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2019\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2019\\\/2\\\/2019\\\/#listItem\",\"name\":\"2\\\/2019\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2019\\\/2\\\/2019\\\/#listItem\",\"position\":3,\"name\":\"2\\\/2019\",\"item\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2019\\\/2\\\/2019\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Aenderungen_erkennen_und_verwerfen\\\/#listItem\",\"name\":\"&Auml;nderungen erkennen und verwerfen\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2019\\\/#listItem\",\"name\":\"2019\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Aenderungen_erkennen_und_verwerfen\\\/#listItem\",\"position\":4,\"name\":\"&Auml;nderungen erkennen und verwerfen\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2019\\\/2\\\/2019\\\/#listItem\",\"name\":\"2\\\/2019\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\",\"name\":\"Datenbankentwickler\",\"description\":\"Das Magazin f\\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/cropped-header_vbe-1.png\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Aenderungen_erkennen_und_verwerfen\\\/#organizationLogo\",\"width\":664,\"height\":225},\"image\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Aenderungen_erkennen_und_verwerfen\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Aenderungen_erkennen_und_verwerfen\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Andr\\u00e9 Minhorst\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Aenderungen_erkennen_und_verwerfen\\\/#webpage\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/Aenderungen_erkennen_und_verwerfen\\\/\",\"name\":\"\\u00c4nderungen erkennen und verwerfen - Visual Basic Entwickler\",\"description\":\"Unter Access k\\u00f6nnen Sie beispielsweise mit der Escape die aktuellen ungespeicherten \\u00c4nderungen an einem Datensatz verwerfen. Das Formular zeigt dann direkt die Daten an, die beim letzten Speichern in den gebundenen Feldern enthalten waren. Dieses Verhalten wollen wir auch f\\u00fcr Fenster abbilden, die an ein Element gebunden sind und die Daten in einer Detailansicht anzeigen. Wir wollen erkennen, ob der Benutzer \\u00c4nderungen an einem Datensatz vorgenommen hat und in Abh\\u00e4ngigkeit davon eine R\\u00fcckg\\u00e4ngig-Schaltfl\\u00e4che aktivieren oder deaktivieren. Durch einen Klick auf die Schaltfl\\u00e4che sollen die vorherigen Werte wiederhergestellt werden. Wie das gelingt, zeigt der vorliegende Beitrag.\",\"inLanguage\":\"de-DE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/Aenderungen_erkennen_und_verwerfen\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"datePublished\":\"2019-04-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#website\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"name\":\"Datenbankentwickler\",\"description\":\"Das Magazin f\\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\",\"inLanguage\":\"de-DE\",\"publisher\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\u00c4nderungen erkennen und verwerfen - Visual Basic Entwickler","description":"Unter Access k\u00f6nnen Sie beispielsweise mit der Escape die aktuellen ungespeicherten \u00c4nderungen an einem Datensatz verwerfen. Das Formular zeigt dann direkt die Daten an, die beim letzten Speichern in den gebundenen Feldern enthalten waren. Dieses Verhalten wollen wir auch f\u00fcr Fenster abbilden, die an ein Element gebunden sind und die Daten in einer Detailansicht anzeigen. Wir wollen erkennen, ob der Benutzer \u00c4nderungen an einem Datensatz vorgenommen hat und in Abh\u00e4ngigkeit davon eine R\u00fcckg\u00e4ngig-Schaltfl\u00e4che aktivieren oder deaktivieren. Durch einen Klick auf die Schaltfl\u00e4che sollen die vorherigen Werte wiederhergestellt werden. Wie das gelingt, zeigt der vorliegende Beitrag.","canonical_url":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/#blogposting","name":"\u00c4nderungen erkennen und verwerfen - Visual Basic Entwickler","headline":"&Auml;nderungen erkennen und verwerfen","author":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"publisher":{"@id":"https:\/\/vbentwickler.de\/#organization"},"image":{"@type":"ImageObject","url":"..\/fileadmin\/_temp_\/2019_02\/pic_176_001.png","@id":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/#articleImage"},"datePublished":"2019-04-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00","inLanguage":"de-DE","mainEntityOfPage":{"@id":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/#webpage"},"isPartOf":{"@id":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/#webpage"},"articleSection":"2\/2019, 2019, Benutzeroberfl\u00e4che mit WPF"},{"@type":"BreadcrumbList","@id":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/vbentwickler.de#listItem","position":1,"name":"Home","item":"https:\/\/vbentwickler.de","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2019\/#listItem","name":"2019"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2019\/#listItem","position":2,"name":"2019","item":"https:\/\/vbentwickler.de\/category\/2019\/","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2019\/2\/2019\/#listItem","name":"2\/2019"},"previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2019\/2\/2019\/#listItem","position":3,"name":"2\/2019","item":"https:\/\/vbentwickler.de\/category\/2019\/2\/2019\/","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/#listItem","name":"&Auml;nderungen erkennen und verwerfen"},"previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2019\/#listItem","name":"2019"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/#listItem","position":4,"name":"&Auml;nderungen erkennen und verwerfen","previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2019\/2\/2019\/#listItem","name":"2\/2019"}}]},{"@type":"Organization","@id":"https:\/\/vbentwickler.de\/#organization","name":"Datenbankentwickler","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","url":"https:\/\/vbentwickler.de\/","logo":{"@type":"ImageObject","url":"https:\/\/vbentwickler.de\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","@id":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/#organizationLogo","width":664,"height":225},"image":{"@id":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author","url":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","@id":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","width":96,"height":96,"caption":"Andr\u00e9 Minhorst"}},{"@type":"WebPage","@id":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/#webpage","url":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/","name":"\u00c4nderungen erkennen und verwerfen - Visual Basic Entwickler","description":"Unter Access k\u00f6nnen Sie beispielsweise mit der Escape die aktuellen ungespeicherten \u00c4nderungen an einem Datensatz verwerfen. Das Formular zeigt dann direkt die Daten an, die beim letzten Speichern in den gebundenen Feldern enthalten waren. Dieses Verhalten wollen wir auch f\u00fcr Fenster abbilden, die an ein Element gebunden sind und die Daten in einer Detailansicht anzeigen. Wir wollen erkennen, ob der Benutzer \u00c4nderungen an einem Datensatz vorgenommen hat und in Abh\u00e4ngigkeit davon eine R\u00fcckg\u00e4ngig-Schaltfl\u00e4che aktivieren oder deaktivieren. Durch einen Klick auf die Schaltfl\u00e4che sollen die vorherigen Werte wiederhergestellt werden. Wie das gelingt, zeigt der vorliegende Beitrag.","inLanguage":"de-DE","isPartOf":{"@id":"https:\/\/vbentwickler.de\/#website"},"breadcrumb":{"@id":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/#breadcrumblist"},"author":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"creator":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"datePublished":"2019-04-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00"},{"@type":"WebSite","@id":"https:\/\/vbentwickler.de\/#website","url":"https:\/\/vbentwickler.de\/","name":"Datenbankentwickler","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","inLanguage":"de-DE","publisher":{"@id":"https:\/\/vbentwickler.de\/#organization"}}]},"og:locale":"de_DE","og:site_name":"Visual Basic Entwickler - Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","og:type":"article","og:title":"\u00c4nderungen erkennen und verwerfen - Visual Basic Entwickler","og:description":"Unter Access k\u00f6nnen Sie beispielsweise mit der Escape die aktuellen ungespeicherten \u00c4nderungen an einem Datensatz verwerfen. Das Formular zeigt dann direkt die Daten an, die beim letzten Speichern in den gebundenen Feldern enthalten waren. Dieses Verhalten wollen wir auch f\u00fcr Fenster abbilden, die an ein Element gebunden sind und die Daten in einer Detailansicht anzeigen. Wir wollen erkennen, ob der Benutzer \u00c4nderungen an einem Datensatz vorgenommen hat und in Abh\u00e4ngigkeit davon eine R\u00fcckg\u00e4ngig-Schaltfl\u00e4che aktivieren oder deaktivieren. Durch einen Klick auf die Schaltfl\u00e4che sollen die vorherigen Werte wiederhergestellt werden. Wie das gelingt, zeigt der vorliegende Beitrag.","og:url":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/","og:image":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","og:image:secure_url":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","article:published_time":"2020-03-27T19:37:29+00:00","article:modified_time":"-001-11-30T00:00:00+00:00","twitter:card":"summary_large_image","twitter:title":"\u00c4nderungen erkennen und verwerfen - Visual Basic Entwickler","twitter:description":"Unter Access k\u00f6nnen Sie beispielsweise mit der Escape die aktuellen ungespeicherten \u00c4nderungen an einem Datensatz verwerfen. Das Formular zeigt dann direkt die Daten an, die beim letzten Speichern in den gebundenen Feldern enthalten waren. Dieses Verhalten wollen wir auch f\u00fcr Fenster abbilden, die an ein Element gebunden sind und die Daten in einer Detailansicht anzeigen. Wir wollen erkennen, ob der Benutzer \u00c4nderungen an einem Datensatz vorgenommen hat und in Abh\u00e4ngigkeit davon eine R\u00fcckg\u00e4ngig-Schaltfl\u00e4che aktivieren oder deaktivieren. Durch einen Klick auf die Schaltfl\u00e4che sollen die vorherigen Werte wiederhergestellt werden. Wie das gelingt, zeigt der vorliegende Beitrag.","twitter:image":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png"},"aioseo_meta_data":{"post_id":"55000176","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2024-01-30 15:58:33","updated":"2026-05-16 08:35:53","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\/category\/2019\/\" title=\"2019\">2019<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\/category\/2019\/2\/2019\/\" title=\"2\/2019\">2\/2019<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t\u00c4nderungen erkennen und verwerfen\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/vbentwickler.de"},{"label":"2019","link":"https:\/\/vbentwickler.de\/category\/2019\/"},{"label":"2\/2019","link":"https:\/\/vbentwickler.de\/category\/2019\/2\/2019\/"},{"label":"&Auml;nderungen erkennen und verwerfen","link":"https:\/\/vbentwickler.de\/Aenderungen_erkennen_und_verwerfen\/"}],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000176"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000176\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000176"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}