{"id":55000118,"date":"2018-02-01T00:00:00","date_gmt":"2020-03-27T19:30:17","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=118"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"ListView_Sortierungen","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/ListView_Sortierungen\/","title":{"rendered":"ListView: Sortierungen"},"content":{"rendered":"<p><b>Das ListView-Steuerelement bietet standardm&auml;&szlig;ig keine M&ouml;glichkeit, die angezeigten Eintr&auml;ge nach dem Inhalt zu sortieren. Wie Sie eine Funktion zum Sortieren der Daten hinzuf&uuml;gen, zeigen wir Ihnen anhand zweier Beispiele. Das erste nutzt einfache Schaltfl&auml;chen, um die Daten nach dem Inhalt einer bestimmten Spalte zu sortieren. Die zweite sieht etwas professioneller aus und f&uuml;gt jeder Spalte die M&ouml;glichkeit hinzu, die enthaltenen Daten per Mausklick auf den Spaltenkopf abwechselnd auf- oder absteigend zu sortieren.<\/b><\/p>\n<h2>Voraussetzung<\/h2>\n<p>Wir setzen auf dem Beispielprojekt an, das wir mi Artikel Das <b>ListView<\/b>-Steuerelement beschrieben haben. Hier haben wir ein <b>ListView<\/b>-Element mit den Daten einer Auflistung namens <b>Adressen <\/b>mit Elementen des Typs <b>Adresse <\/b>gef&uuml;llt. <\/p>\n<h2>Sortierung per Klick auf die Spaltenk&ouml;pfe<\/h2>\n<p>Das Listenfeld im Windows Explorer liefert die M&ouml;glichkeit, per Klick auf die Spaltenk&ouml;pfe in der Dateiliste die Sortierung anzupassen (siehe Bild 1). Dies wollen wir f&uuml;r das <b>ListView<\/b>-Element auch realisieren. Dazu nutzen wir eine neue Schaltfl&auml;che namens <b>btnSortByFirstName<\/b>, die wir wie folgt definieren:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_01\/pic_118_008.png\" alt=\"Sortierung im Windows Explorer\" width=\"499,6607\" height=\"412,0336\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Sortierung im Windows Explorer<\/span><\/b><\/p>\n<pre>&lt;Button x:Name=\"btnSortByFirstNameAsc\" Click=\"btnSortByFirstNameAsc_Click\"&gt;Aufsteigend nach Vorname sortieren&lt;\/Button&gt;<\/pre>\n<p>Und wir legen direkt noch eine Schaltfl&auml;che f&uuml;r die umgekehrte Sortierung an:<\/p>\n<pre>&lt;Button x:Name=\"btnSortByFirstNameDesc\" Click=\"btnSortByFirstNameDesc_Click\"&gt;Absteigend nach Vorname sortieren&lt;\/Button&gt;<\/pre>\n<p>F&uuml;r die Schaltfl&auml;chen legen wir die folgenden beiden Ereignismethoden an:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnSortByFirstNameAsc_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>sortDescription<span style=\"color:blue;\"> As <\/span>SortDescription\r\n     sortDescription = <span style=\"color:blue;\">New<\/span> SortDescription(\"Vorname\", ListSortDirection.Ascending)\r\n     lvwAdressen.Items.SortDescriptions.Clear()\r\n     lvwAdressen.Items.SortDescriptions.Add(sortDescription)\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>btnSortByFirstNameDesc_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>sortDescription<span style=\"color:blue;\"> As <\/span>SortDescription\r\n     sortDescription = <span style=\"color:blue;\">New<\/span> SortDescription(\"Vorname\", ListSortDirection.Descending)\r\n     lvwAdressen.Items.SortDescriptions.Clear()\r\n     lvwAdressen.Items.SortDescriptions.Add(sortDescription)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese legen ein neues Element des Typs <b>SortDescription <\/b>und &uuml;bergeben diesem den Namen der zu sortierenden Spalte und die Sortierreihenfolge. Dann leeren sie die bisherigen Sortierungen in der Auflistung <b>SortDescriptions <\/b>einer weiteren Auflistung namens <b>Items <\/b>und f&uuml;gen das neue Objekt &uuml;ber die Variable <b>sortDescription <\/b>zur Auflistung <b>SortDescriptions <\/b>hinzu. Als Ergebnis k&ouml;nnen Sie die Sortierreihenfolge der Spalte <b>Vorname <\/b>nun in beiden Richtungen festlegen (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_01\/pic_118_007.png\" alt=\"Zwei verschiedene Sortierungen\" width=\"700\" height=\"257,8948\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Zwei verschiedene Sortierungen<\/span><\/b><\/p>\n<h2>Mehrere Kriterien<\/h2>\n<p>Sie k&ouml;nnen nun auch mehrere Kriterien festlegen. Dazu erstellen Sie einfach immer weitere Objekte des Typs <b>SortDescription <\/b>und f&uuml;gen diese der <b>SortDescriptions<\/b>-Auflistung hinzu. Wenn Sie m&ouml;chten, dass die Daten erst nach dem Nachnamen und dann nach dem Vornamen aufsteigend sortiert werden, was bedeutet, dass erst nach dem Nachnamen sortiert wird und erst dann nach dem Vornamen, wenn es mehrere gleiche Nachnamen gibt, verwenden Sie etwa den folgenden Code:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>view<span style=\"color:blue;\"> As <\/span>CollectionView\r\n<span style=\"color:blue;\">Dim <\/span>sortDescription<span style=\"color:blue;\"> As <\/span>SortDescription\r\nview = CollectionViewSource.GetDefaultView(lvwAdressen.ItemsSource)\r\nview.SortDescriptions.Clear()\r\nsortDescription = <span style=\"color:blue;\">New<\/span> SortDescription(\"Nachname\", ListSortDirection.Ascending)\r\nview.SortDescriptions.Add(sortDescription)\r\nsortDescription = <span style=\"color:blue;\">New<\/span> SortDescription(\"Vorname\", ListSortDirection.Ascending)\r\nview.SortDescriptions.Add(sortDescription)<\/pre>\n<h2>Sortieren &uuml;ber die Spaltenk&ouml;pfe<\/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\/55000118\/\">\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\/55000118?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\/55000118\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"123b777de9\"\/>\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>Das ListView-Steuerelement bietet standardm&auml;&szlig;ig keine M&ouml;glichkeit, die angezeigten Eintr&auml;ge nach dem Inhalt zu sortieren. Wie Sie eine Funktion zum Sortieren der Daten hinzuf&uuml;gen, zeigen wir Ihnen anhand zweier Beispiele. Das erste nutzt einfache Schaltfl&auml;chen, um die Daten nach dem Inhalt einer bestimmten Spalte zu sortieren. Die zweite sieht etwas professioneller aus und f&uuml;gt jeder Spalte die M&ouml;glichkeit hinzu, die enthaltenen Daten per Mausklick auf den Spaltenkopf abwechselnd auf- oder absteigend zu sortieren.<\/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":[66012018,662018,44000027,44000015],"tags":[],"yst_prominent_words":[],"class_list":["post-55000118","post","type-post","status-publish","format-standard","hentry","category-66012018","category-662018","category-Excel_programmieren","category-WPFSteuerelemente"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000118","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=55000118"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000118\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000118"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}