{"id":55000031,"date":"2016-04-01T00:00:00","date_gmt":"2020-03-27T19:18:22","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=31"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Fenster_mit_1nDaten_und_LookupFeld","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Fenster_mit_1nDaten_und_LookupFeld\/","title":{"rendered":"Fenster mit 1:n-Daten und Lookup-Feld"},"content":{"rendered":"<p><b>Im vorherigen Artikel der Kategorie &#8220;Von Access zu WPF&#8221; haben wir Daten einer einfachen Tabelle in einem Fenster abgebildet. Nun gehen wir einen Schritt weiter und schauen uns die Abbildung zweier per 1:n-Beziehung verkn&uuml;pfter Tabellen an, wobei die Daten der einen Tabelle per Kombinationsfeld als Lookup-Wert ausgew&auml;hlt werden sollen. Eines der bekanntesten Beispiele f&uuml;r eine solche Lookup-Tabelle ist die Tabelle tblAnreden. Den anderen Teil &uuml;bernimmt selbstverst&auml;ndlich die Tabelle tblKunden.<\/b><\/p>\n<h2>Fenster erstellen<\/h2>\n<p>Wir wollen also ein Fenster erstellen, das die Daten der Tabelle <b>tblKunden <\/b>anzeigt und zur Auswahl einer Anrede f&uuml;r den jeweils angezeigten Kunden ein Kombinationsfeld zur Auswahl eines Datensatzes der Tabelle <b>tblAnreden <\/b>zur Verf&uuml;gung stellt.<\/p>\n<p>Dazu f&uuml;gen wir einem Projekt auf Basis der Vorlage <b>Visual C#|WPF-Vorlagen <\/b>zun&auml;chst ein neues Fenster namens <b>TabelleMitLookupDaten <\/b>hinzu.<\/p>\n<h2>Datenbank hinzuf&uuml;gen<\/h2>\n<p>Wir wollen, wie in anderen Beispielen auch, wieder mit der Access-Datenbank <b>Suedsturm.mdb <\/b>arbeiten. F&uuml;gen Sie diese daher zum Projekt hinzu. Das gelingt am einfachsten, indem Sie die Datenbank aus dem Windows Explorer einfach auf den Namen des Projekts im Projektmappen-Explorer ziehen.<\/p>\n<h2>DataSet hinzuf&uuml;gen<\/h2>\n<p>Wie im Beispiel zur Anzeige der Daten einer einfachen Tabelle wollen wir auch hier wieder ein typisiertes DataSet erstellen, das hei&szlig;t: Wir lassen uns von Visual Studio eine Menge Arbeit abnehmen, indem wir einen Assistenten nutzen.<\/p>\n<p>Um diesen zu starten, w&auml;hlen Sie den Men&uuml;eintrag <b>Projekt|Neue Datenquelle hinzuf&uuml;gen<\/b>.<\/p>\n<p>Im nun erscheinenden Assistenten zum Konfigurieren von Datenquellen klicken Sie im ersten Schritt unter der &Uuml;berschrift <b>Datenquellentyp ausw&auml;hlen <\/b>auf den Eintrag <b>Datenbank<\/b>.<\/p>\n<p>Damit gelangen wir schnell zum zweiten Schritt namens <b>Datenbankmodell ausw&auml;hlen<\/b>. Hier gibt es nicht viel Auswahl, n&auml;mlich nur den Eintrag <b>DataSet<\/b>, den Sie folgerichtig ebenfalls doppelt anklicken, um auch diesen Schritt schnell zu beenden.<\/p>\n<p>Sollten Sie das neue Beispiel in der Beispieldatenbank aus dem Artikel <b>Fenster mit einfachen Tabellendaten <\/b>anlegen, sieht der folgende Dialogschritt wie in Bild 1 aus: Es liegt n&auml;mlich bereits eine Datenverbindung namens <b>SuedsturmConnectionString <\/b>vor, die Sie beibehalten k&ouml;nnen. Wenn Sie mit einem neuen, leeren Projekt begonnen haben &#8211; kein Problem! Sofern Sie, wie oben angegeben, die Datenbank <b>Suedsturm.mdb <\/b>zum Projekt hinzugef&uuml;gt haben, erscheint diese als Auswahlm&ouml;glichkeit im genannten Dialog. Klicken Sie hier auf <b>Weiter<\/b>, fragt der Assistent Sie noch, ob Sie die Verbindung unter dem Namen <b>SuedsturmConnectionString <\/b>speichern wollen, was Sie akzeptieren. Beim Anlegen des n&auml;chsten DataSets k&ouml;nnen Sie dann auch auf den Eintrag <b>SuedsturmConnectionString <\/b>zugreifen.<\/p>\n<h2>Tabellen f&uuml;r das DataSet zusammenstellen<\/h2>\n<p>Nun wollen wir die Tabellen festlegen, die wir im DataSet ben&ouml;tigen. Anders als unter Access ben&ouml;tigen wir hier nicht nur die Tabelle <b>tblKunden<\/b>, die dort, ein entsprechendes Nachschlagefeld vorausgesetzt, gleich die Daten der Tabelle <b>tblAnreden <\/b>mitliefert, sondern f&uuml;gen beide Tabellen zum DataSet hinzu. Nach der Auswahl der Tabellen <b>tblKunden <\/b>und <b>tblAnreden <\/b>geben Sie als Namen f&uuml;r das DataSet den Wert <b>dsKundenAnreden <\/b>an (siehe Bild 2).<\/p>\n<p>Damit legt Visual Studio wieder ein Element namens <b>dsKundenAnreden.xsd <\/b>im Projektmappen-Explorer an, das die Definition des typisierten DataSets und auch die entsprechenden Objekte, Eigenschaften und Methoden bereith&auml;lt.<\/p>\n<h2>Daten der Tabelle tblKunden zum Fenster hinzuf&uuml;gen<\/h2>\n<p>Nun f&uuml;gen wir die Felder der Tabelle <b>tblKunden<\/b> zum Fenster <b>TabelleMitLookupdaten <\/b>hinzu.<\/p>\n<p>Dazu aktivieren Sie zun&auml;chst das Datenquellen-Fenster (<b>Alt + Umschalt + D <\/b>oder <b>Ansicht|Fenster|Datenquellen<\/b>). Dieses zeigt nun (gegebenenfalls neben anderen) das DataSet <b>dsKundenAnreden <\/b>mit den beiden untergeordneten Tabellen <b>tblKunden <\/b>und <b>tblAnreden <\/b>an. Wir wollen ein Detailformular f&uuml;r die Darstellung eines Kunden anlegen, also bereiten wir den Eintrag <b>tblKunden <\/b>im <b>Datenquellen<\/b>-Fenster nun darauf vor. Dazu klicken Sie auf <b>tblKunden<\/b>, sodass sich der Eintrag in ein Kombinationsfeld &auml;ndert, und &ouml;ffnen dieses. Hier legen Sie den Wert <b>Details<\/b> fest (siehe Bild 3).<\/p>\n<p>Der Eintrag <b>tblKunden<\/b> hat nun ein neues Icon erhalten, was auf die ge&auml;nderte Ansicht beim Hinzuf&uuml;gen in ein Fenster hinweist (siehe Bild 4). Wenn Sie die Tabelle nun in das Fenster ziehen, erscheinen bereits die gew&uuml;nschten Felder samt Bezeichnungsfeldern &#8211; allerdings alle als <b>TextBox<\/b>-Steuerelement. Wir m&ouml;chten aber doch ein Kombinationsfeld zur Auswahl der Anreden anlegen!<\/p>\n<p>Doch auch daf&uuml;r sieht der <b>Datenquellen<\/b>-Dialog eine M&ouml;glichkeit vor. Klappen Sie dort den Eintrag <b>tblKunden <\/b>auf und klicken Sie dann auf <b>AnredeID<\/b>. Auch hier erscheint ein Kombinationsfeld, aus dem Sie den Eintrag <b>ComboBox <\/b>ausw&auml;hlen (siehe Bild 5).<\/p>\n<p>Damit haben Sie den Steuerelement-Typ f&uuml;r dieses Feld ge&auml;ndert, wie auch die anschlie&szlig;ende Anzeige eines neuen Icons f&uuml;r den Eintrag best&auml;tigt (siehe Bild 6).<\/p>\n<p>Wenn Sie nun die Tabelle <b>tblKunden <\/b>in das WPF-Fenster ziehen, erscheint m&ouml;glicherweise die Fehlermeldung aus Bild 7. In diesem Fall erstellen Sie das Projekt einfach einmal mit dem Men&uuml;eintrag <b>Erstellen|<Projektname> erstellen <\/b>(<b><Projektname> <\/b>durch den aktuellen Projektnamen ersetzen). Im n&auml;chsten Anlauf sollte es dann gelingen.<\/p>\n<p>Ziehen Sie dann die Tabelle <b>tblKunden <\/b>in die linke, obere Ecke des WPF-Fensters wie in Bild 8 dargestellt. Die Darstellung im Entwurf sieht zun&auml;chst etwas missgl&uuml;ckt aus, was aber daran liegt, dass die Inhalte noch nicht initialisiert wurden.<\/p>\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\/55000031\/\">\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\/55000031?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<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000031\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"9fac6dd15a\"\/>\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>Im vorherigen Artikel der Kategorie &#8220;Von Access zu WPF&#8221; haben wir Daten einer einfachen Tabelle in einem Fenster abgebildet. Nun gehen wir einen Schritt weiter und schauen uns die Abbildung zweier per 1:n-Beziehung verkn&uuml;pfter Tabellen an, wobei die Daten der einen Tabelle per Kombinationsfeld als Lookup-Wert ausgew&auml;hlt werden sollen. Eines der bekanntesten Beispiele f&uuml;r eine solche Lookup-Tabelle ist die Tabelle tblAnreden. Den anderen Teil &uuml;bernimmt selbstverst&auml;ndlich die Tabelle tblKunden.<\/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":[66022016,662016,44000002,44000027,44000007],"tags":[],"yst_prominent_words":[66062022,66062023,66062049,66062051,66062059,66062041,66062043,66062061,66062096],"class_list":["post-55000031","post","type-post","status-publish","format-standard","hentry","category-66022016","category-662016","category-Benutzeroberflaeche_mit_WPF","category-Excel_programmieren","category-Von_Access_zu_WPF"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000031","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=55000031"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000031\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000031"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}