vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Datensätze Filtern 
Autor: ERBRU
Datum: 04.04.17 18:29

Hallo zusammen,

habe hier schon einiges hilfreiches gefunden, doch dieses noch nicht wirklich.

also ich habe eine Tabelle mit einer Spalte Namens Bestelldatum

OK nichts besonderes nun habe ich noch eine Combobox aufs Formular gebracht die ich mit der Jahres Zahl aus der Bestelldatum Spalte auslese.

nun möchte ich in der ComboBox ein Jahr auswählen und die Datensätze Richtig sortiert filtern

so lese ich die Spalte aus
 Private Sub Jahresliste()
        If BS_Eingang_Liste Is Nothing Then Exit Sub
        If BS_Eingang_Liste.Count = 0 Then Exit Sub
        Dim Jahr_von = BS_Eingang_Liste.Min(Function(x) x.Bestelldatum).Year
        Dim Jahr_bis = BS_Eingang_Liste.Max(Function(x) x.Bestelldatum).Year
 
        cbx_Jahr.Items.Clear()
        For i = Jahr_von To Jahr_bis : cbx_Jahr.Items.Add(i) : Next
        cbx_Jahr.SelectedIndex = -1
    End Sub
zur Datenanzeige verwende ich eine gebundene Datagridview

hat jemand eine Idee wie ich die Filterung Jahr aus der Bestelldatum Spalte umsetzen kann?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensätze Filtern 
Autor: Manfred X
Datum: 05.04.17 00:07

Hallo!

Vielleicht so oder ähnlich ....
Public Class frmComboBinding
 
    Dim dt As New DataTable, bs As BindingSource
 
    Dim dgv As New DataGridView With {.Parent = Me, .Top = 50}
    Dim WithEvents cbo As New ComboBox With {.Parent = Me}
 
 
    Private Sub frmComboBinding_Load(sender As System.Object, _
                         e As System.EventArgs) Handles MyBase.Load
 
        'Testspalten
        dt.Columns.Add("ID", GetType(Integer))
        dt.Columns.Add("Date", GetType(Date))
 
        'Testdaten
        Dim year As Integer = 2000, id As Integer = 0
        For i As Integer = 1 To 10
            year += 1 : id += 1
            dt.Rows.Add(id, New Date(year, i + 1, 15))
            id += 1
            dt.Rows.Add(id, New Date(year, i, 25))
        Next i
 
        'Datenbindung Quelle
        bs = New BindingSource With {.DataSource = dt}
 
        'Sortierspalte und Richtung festlegen
        bs.Sort = "Date ASC"
 
        dgv.DataSource = bs
 
        'Ermittlung der Jahreszahlen als Liste (LINQ)
        Dim dates As List(Of Integer) = _
            (From rw As DataRow In dt.AsEnumerable _
             Let Vl = CInt(rw.Field(Of Date)("Date").ToString("yyyy"))
             Select Vl Distinct).ToList
 
        'Liste an Combobox binden
        cbo.DataSource = dates
 
    End Sub
 
 
    Private Sub cbo_SelectedIndexChanged(sender As Object, _
        e As System.EventArgs) Handles cbo.SelectedIndexChanged
 
        If cbo.SelectedIndex = -1 Then
            bs.Filter = ""
        Else
            'Filter setzen: Datumswerte im Standardformat angeben
            Dim year As String = cbo.SelectedItem.ToString
            bs.Filter = _
             "Date >= #1/1/" & year & "# AND Date <= #12/31/" & year & "#"
        End If
    End Sub
End Class


Beitrag wurde zuletzt am 05.04.17 um 00:08:29 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensätze Filtern 
Autor: Franki
Datum: 05.04.17 05:37

Hallo,
Zitat:


also ich habe eine Tabelle mit einer Spalte Namens Bestelldatum


Woher stammen denn die Daten in dieser Tabelle?
Wahrscheinlich aus einer Datenbank wo du alle Bestellungen ausgelesen hast?

Zitat:


OK nichts besonderes nun habe ich noch eine Combobox aufs
Formular gebracht die ich mit der Jahres Zahl aus der
Bestelldatum Spalte auslese.


Kann man durchaus machen, aber siehe oben, besser ist es eine neue Abfrage auf die Datenquelle zu machen wo das Jahr als Kriterium dient (Z.B SQL bei einer Datenbank)

Zitat:


nun möchte ich in der ComboBox ein Jahr auswählen und die
Datensätze Richtig sortiert filtern


Siehe oben, bei vielen Datn ist es wesentlich performanter neu aus der Datenquelle anhand des Kriterums auszulesen anstatt im Ergebnis zu filtern.

Ich weiß ja jetzt nicht welche Datenquelle du hast und wie die aufgebaut ist. Sollte es sich um eine Datenbank handeln, dann bist du mit meinem Vorschlag definitiv auf der sicheren Seite was die Performance und die Zuverlässigkeit der Daten angeht.

Wenn es sich jedoch nur um 0815 Daten handeln sollte kannst du natürlich auch im Grid selbst filtern / sortieren.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensätze Filtern 
Autor: Manfred X
Datum: 05.04.17 08:08

Hallo!

Im Rahmen der Nutzung von ADO.Net auf sehr großen Datentabellen ist bei Abfragen
die Anwendung einer "gestaffelten" Strategie empfehlenswert.

Zunächst führt man eine Aggregierungsabfrage durch und ermittelt, wie viele
Datensätze pro Jahr vorliegen.
Automatisiert oder per User-Auswahl im Dialog kann man auf dieser Grundlage einen
geeigneten Abfragezeitraum bestimmen (z.B. bezogen auf eine Obergrenze der gleichzeitig
im Speicher zu haltenden Datensätze - eventuell abhängig von der Größe des aktuell
verfügbaren Speichers).
Die Daten-Ansicht kann innerhalb der In-Memory-DB durch Filtern der abgefragten
Datensätze (DataView o.ä.) im Dialog durch den User weiter eingegrenzt werden.

Beitrag wurde zuletzt am 05.04.17 um 08:14:39 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensätze Filtern 
Autor: ERBRU
Datum: 05.04.17 19:39

Hallo Manfred X,

Danke so hast den Nagel auf den Kopf getroffen.

es klappt bei mir auch ich konnte es in meinem Projekt (anders) aber verwenden.

eine Frage noch Allgemein zur CoBo kann man auch generell immer zum letzten Eintrag gehen

2010
2011
2012
2013
2014
2015
2016
2017 (aktuelles Jahr)

ist die CoBo ja sorted true, ich möchte nun immer das aktuelle Jahr automatisch ausgewählt haben
also nicht SelectedIndex = 0 sondern SelectedIndex = "aktuelles Jahr" ??
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensätze Filtern 
Autor: Manfred X
Datum: 05.04.17 22:53

Hallo!

Die Verwendung der "sorted"-Eigenschaft der gebundenen Combobox ist
nicht erforderlich.

Das Sortieren übernimmt z.B. LINQ durch eine "Order By"-Klausel:
   'Ermittlung der Jahreszahlen als Liste (LINQ)
   Dim dates As List(Of Integer) = _
    (From rw As DataRow In dt.AsEnumerable _
     Select yr = rw.Field(Of Date)("Date").Year Distinct Order By yr).ToList
Man kann auch die Sort-Methode der generischen Liste einsetzen:
dates.Sort()
Alternativ kann man auch eine "Bindingsource" zwischen die Liste und die Combobox
schalten und deren "Sort"-Methode heranziehen.

Den Listenindex, in dem die aktuelle Jahreszahl eingetragen ist,
ermittelt man z.B. durch:
Dim index_aktuellesjahr As Integer = dates.IndexOf(Today.Year)
Nach dem Erstellen der Datenbindung erfolgt das Setzen der Jahreszahl in
der Combobox "cbo" durch:
cbo.SelectedIndex = index_aktuellesjahr


Beitrag wurde zuletzt am 05.04.17 um 22:58:54 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensätze Filtern 
Autor: ERBRU
Datum: 06.04.17 04:30

Perfect Manfred X

genau so hatte ich es mir gewünscht. Funktioniert bestens.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Und wann verschiebt jemand das in das .NET Forum? 
Autor: Blackbox
Datum: 17.04.17 18:21

nur so eine Frage
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Kontakt-Formular verwenden .... 
Autor: Manfred X
Datum: 18.04.17 10:24

Hinweise an die Redaktion bitte nicht ins Forum posten,
sondern das Kontaktformular nutzen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel