{"id":55000069,"date":"2016-12-01T00:00:00","date_gmt":"2020-03-27T19:24:12","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=69"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"EDM_Kundendetails_verwalten","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/EDM_Kundendetails_verwalten\/","title":{"rendered":"EDM: Kundendetails verwalten"},"content":{"rendered":"<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_06\/pic_69_002.png\" alt=\"Die Seite zum Bearbeiten und Anlegen von Kunden\" width=\"499,6607\" height=\"433,1696\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Die Seite zum Bearbeiten und Anlegen von Kunden<\/span><\/b><\/p>\n<p><b>In unserer L&ouml;sung zur Verwaltung von Bestellungen spielt die Kundenverwaltung nat&uuml;rlich eine gro&szlig;e Rolle. In diesem Artikel wollen wir uns ansehen, wie wir einen neuen Kunden anlegen oder einen vorhandenen Kunden bearbeiten k&ouml;nnen &#8211; eingebettet nat&uuml;rlich in unser Hauptfenster, das wir im Artikel &#8220;Kunden verwalten&#8221; beleuchten. Daher ben&ouml;tigen wir auch kein eigenes Fenster, um die Kundendetails anzuzeigen, sondern erstellen ein Page-Objekt mit den relevanten Informationen. Dieses nutzen wir dann sowohl zum Anlegen neuer Kunden als auch zum Bearbeiten vorhandener Kunden.<\/b><\/p>\n<p>Die Seite zum Bearbeiten und Erstellen von Kunden soll in Aktion wie in Bild 1 aussehen. Wenn der Benutzer auf den Ribbon-Eintrag <b>Kunden&uuml;bersicht <\/b>klickt, soll die Kundenliste erscheinen, &uuml;ber die per Doppelklick einer der Kunden in der hier gezeigten Detailansicht erscheinen soll. Wenn der Benutzer auf die Schaltfl&auml;che <b>Neuer Kunde <\/b>klickt, erscheint die gleiche Seite, allerdings mit einem leeren <b>Kunden<\/b>-Objekt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_06\/pic_69_002.png\" alt=\"Die Seite zum Bearbeiten und Anlegen von Kunden\" width=\"499,6607\" height=\"433,1696\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Die Seite zum Bearbeiten und Anlegen von Kunden<\/span><\/b><\/p>\n<h2>Kundendetails-Seite anlegen<\/h2>\n<p>Um die Kunden zu bearbeiten, legen Sie in unserem Projekt <b>Bestellverwaltung <\/b>ein Objekt des Typs <b>Seite <\/b>an. Wir wollen diese Seite in ein <b>Frame<\/b>-Element einblenden, wann immer die Bearbeitung eines Kunden n&ouml;tig ist &#8211; oder wenn ein neuer Kunde angelegt werden soll. Erstmal m&uuml;ssen wir die Seite jedoch erstellen und mit den entsprechenden Steuerelementen sowie dem Code zum F&uuml;llen der Steuerelemente mit den Daten ausstatten. Die Seite soll im Entwurf wie in Bild 2 aussehen. Die zweite und die vierte Spalte haben wir so ausgelegt, dass sie sich beim Verbreitern des <b>Page<\/b>-Elements ebenfalls im gleichen Ma&szlig;e verbreitern &#8211; allerdings nur bis zu einer bestimmten maximalen Breite.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_06\/pic_69_001.png\" alt=\"Die Seite zum Bearbeiten und Anlegen von Kunden im Entwurf\" width=\"499,6607\" height=\"286,8423\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Die Seite zum Bearbeiten und Anlegen von Kunden im Entwurf<\/span><\/b><\/p>\n<h2>Standardwerte f&uuml;r Steuerelementeigenschaften<\/h2>\n<p>Den WPF-Code f&uuml;r diese Seite finden Sie in Listing 1. Zu Beginn des Codes haben wir im Breich <b>Page.Resources <\/b>einige <b>Style<\/b>-Elemente hinzugef&uuml;gt. <b>Style<\/b>-Elemente dienen der Festlegung von Werten f&uuml;r bestimmte Attribute von WPF-Elementen. Das erste verwendet f&uuml;r das Attribut <b>TargetType <\/b>den Wert <b>Label<\/b>, das hei&szlig;t, dass es Standardwerte f&uuml;r <b>Label<\/b>-Elemente vorgibt. In diesem Fall legen wir mit den untergeordneten Elementen des Typs <b>Setter <\/b>jeweils die Eigenschaft (<b>Property<\/b>) und den Wert (<b>Value<\/b>) der Voreinstellung fest. Das Attribut <b>HorizontalAlignment <\/b>soll den Standardwert <b>Left <\/b>erhalten, <b>Margin <\/b>den Wert <b>3 <\/b>und <b>VerticalAlignment <\/b>den Wert <b>Center<\/b>. Diese Werte brauchen wir dann nicht mehr explizit f&uuml;r die Steuerelemente des Typs <b>Label <\/b>festzulegen. Sollten wir an einer bestimmten Stelle einmal andere Werte ben&ouml;tigen, tragen Sie diese einfach f&uuml;r das entsprechende <b>Label<\/b>-Element ein.<\/p>\n<pre>&lt;Page x:Class=\"Bestellverwaltung.Kundendetails\"\r\n       ...\r\n       d:DesignHeight=\"250\" d:DesignWidth=\"450\"\r\n       Title=\"Kundendetails\"&gt;\r\n     &lt;Page.Resources&gt;\r\n         &lt;Style TargetType=\"Label\"&gt;\r\n             &lt;Setter Property=\"HorizontalAlignment\" Value=\"Left\"&gt;&lt;\/Setter&gt;\r\n             &lt;Setter Property=\"Margin\" Value=\"3\"&gt;&lt;\/Setter&gt;\r\n             &lt;Setter Property=\"VerticalAlignment\" Value=\"Center\"&gt;&lt;\/Setter&gt;\r\n         &lt;\/Style&gt;\r\n         &lt;Style TargetType=\"TextBox\"&gt;\r\n             &lt;Setter Property=\"Height\" Value=\"23\"&gt;&lt;\/Setter&gt;\r\n             &lt;Setter Property=\"Margin\" Value=\"3\"&gt;&lt;\/Setter&gt;\r\n             &lt;Setter Property=\"VerticalAlignment\" Value=\"Center\"&gt;&lt;\/Setter&gt;\r\n         &lt;\/Style&gt;\r\n     &lt;\/Page.Resources&gt;\r\n     &lt;Grid x:Name=\"grid1\" HorizontalAlignment=\"Stretch\" Margin=\"8,8,0,0\" VerticalAlignment=\"Top\"&gt;\r\n         &lt;Grid.ColumnDefinitions&gt;\r\n             &lt;ColumnDefinition Width=\"Auto\" \/&gt;\r\n             &lt;ColumnDefinition Width=\"*\" MaxWidth=\"300\"\/&gt;\r\n             &lt;ColumnDefinition Width=\"Auto\"\/&gt;\r\n             &lt;ColumnDefinition Width=\"*\" MaxWidth=\"300\"\/&gt;\r\n         &lt;\/Grid.ColumnDefinitions&gt;\r\n         &lt;Grid.RowDefinitions&gt;\r\n             &lt;RowDefinition Height=\"Auto\"\/&gt;\r\n             ...\r\n         &lt;\/Grid.RowDefinitions&gt;\r\n         &lt;Label Content=\"ID:\" Grid.Column=\"0\" \/&gt;\r\n         &lt;TextBox x:Name=\"txtID\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Text=\"{Binding kunde.ID, Mode=TwoWay, \r\n             NotifyOnValidationError=true, ValidatesOnExceptions=true}\" Width=\"50\" IsEnabled=\"False\" BorderBrush=\"Transparent\"\/&gt;\r\n         &lt;Label Content=\"Firma:\" Grid.Column=\"0\" Grid.Row=\"1\" \/&gt;\r\n         &lt;TextBox x:Name=\"txtFirma\" ... Text=\"{Binding kunde.Firma, ...}\" \/&gt;\r\n         &lt;Label Content=\"Anrede ID:\" Grid.Column=\"0\" Grid.Row=\"2\" \/&gt;\r\n         &lt;ComboBox x:Name=\"cboAnreden\" Grid.Column=\"1\" HorizontalAlignment=\"Stretch\" Height=\"23\" Grid.Row=\"2\" \r\n             ItemsSource=\"{Binding Anreden}\" SelectedItem=\"{Binding kunde.Anreden}\" DisplayMemberPath=\"Bezeichnung\" \r\n             SelectedValuePath=\"ID\" VerticalAlignment=\"Center\" Margin=\"3\"&gt;&lt;\/ComboBox&gt;\r\n         &lt;Label Content=\"Vorname:\" ... \/&gt;&lt;TextBox x:Name=\"txtVorname\" ... Text=\"{Binding kunde.Vorname, ...}\" \/&gt;\r\n         &lt;Label Content=\"Nachname:\" ... \/&gt;&lt;TextBox x:Name=\"txtNachname\" ... Text=\"{Binding kunde.Nachname, ...}\" \/&gt;\r\n         &lt;Label Content=\"Geburtsdatum:\" ...\/&gt;\r\n         &lt;DatePicker x:Name=\"dpGeburtsdatum\" ... SelectedDate=\"{Binding kunde.Geburtsdatum, ...}\" Margin=\"3\"\/&gt;\r\n         &lt;Label Content=\"Strasse:\" ... \/&gt;&lt;TextBox x:Name=\"txtStrasse\" ... Text=\"{Binding kunde.Strasse, ...}\" \/&gt;\r\n         &lt;Label Content=\"PLZ:\" ... \/&gt;&lt;TextBox x:Name=\"txtPLZ\" Text=\"{Binding kunde.PLZ, ...}\" \/&gt;\r\n         &lt;Label Content=\"Ort:\" ... \/&gt; &lt;TextBox x:Name=\"txtOrt\" ... Text=\"{Binding kunde.Ort, ...}\" \/&gt;\r\n         &lt;Label Content=\"Telefon:\" ... \/&gt;&lt;TextBox x:Name=\"txtTelefon\" ... Text=\"{Binding kunde.Telefon, ...}\" \/&gt;\r\n         &lt;Label Content=\"EMail:\" ... \/&gt;&lt;TextBox x:Name=\"txtEMail\" ... Text=\"{Binding kunde.EMail, ...}\" \/&gt;\r\n         &lt;Button x:Name=\"btnSpeichern\" Click=\"btnSpeichern_Click\" Grid.Row=\"6\" Grid.Column=\"0\" Height=\"23\" \r\n             Content=\"Speichern\"&gt;&lt;\/Button&gt;\r\n     &lt;\/Grid&gt;\r\n&lt;\/Page&gt;<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: WPF-Code f&uuml;r die Seite Kundendetails<\/span><\/b><\/p>\n<p>Auch f&uuml;r das <b>TextBox<\/b>-Steuerelement haben wir drei Attribute vordefiniert, n&auml;mlich <b>Height <\/b>(Wert: <b>23<\/b>), <b>Margin <\/b>(<b>3<\/b>) und <b>VerticalAlignment <\/b>(<b>Center<\/b>).<\/p>\n<p>Damit erhalten wir nicht nur den Vorteil, diese Werte nicht mehr explizit einstellen zu m&uuml;ssen. Wir brauchen au&szlig;erdem auch &Auml;nderungen, die alle Elemente des gleichen Typs betreffen, nur noch an einer Stelle vorzunehmen.<\/p>\n<h2>Das Grid<\/h2>\n<p>Unser Grid soll vier Spalten und sieben Zeilen enthalten. F&uuml;r die Spalten 1 und 3 haben wir die Breite <b>Auto <\/b>festgelegt, f&uuml;r die Spalten 2 und 4 den Wert <b>* <\/b>sowie die maximale Breite von <b>300<\/b>.<\/p>\n<p>Die einzelnen Steuerelemente weisen wir den Zellen des Grids zu, indem wir die Eigenschaften <b>Grid.Column <\/b>und <b>Grid.Row <\/b>auf die entsprechenden 0-basierten Werte einstellen.<\/p>\n<h2>Die gebundenen Steuerelemente<\/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\/55000069\/\">\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\/55000069?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\/55000069\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"05094fc278\"\/>\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>In unserer L&ouml;sung zur Verwaltung von Bestellungen spielt die Kundenverwaltung nat&uuml;rlich eine gro&szlig;e Rolle. In diesem Artikel wollen wir uns ansehen, wie wir einen neuen Kunden anlegen oder einen vorhandenen Kunden bearbeiten k&ouml;nnen &#8211; eingebettet nat&uuml;rlich in unser Hauptfenster, dass wir im Artikel &#8220;Kunden verwalten&#8221; beleuchten. Daher ben&ouml;tigen wir auch kein eigenes Fenster, um die Kundendetails anzuzeigen, sondern erstellen ein Page-Objekt mit den relevanten Informationen. Dieses nutzen wir dann sowohl zum Anlegen neuer Kunden als auch zum Bearbeiten vorhandener Kunden.<\/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":[662016,66062016,44000002,44000004,44000025,44000007],"tags":[],"yst_prominent_words":[],"class_list":["post-55000069","post","type-post","status-publish","format-standard","hentry","category-662016","category-66062016","category-Benutzeroberflaeche_mit_WPF","category-Loesungen","category-VBAProgrammierung","category-Von_Access_zu_WPF"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000069","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=55000069"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000069\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000069"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}