Datepart Funktion als Filter in bindinsource zulässig?

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von stepper71.

    Datepart Funktion als Filter in bindinsource zulässig?

    Hallo,

    ich nutze die Filterfunktion für eine Bindingsource einer Datatable und möchte die Datepartfunktion dabei nutzen.

    Bisher sieht das so aus:

    VB.NET-Quellcode

    1. strSQLString = "(Datepart(year, Datum) ='1000')"
    2. BilderSerieBindingSource.Filter = strSQLString


    Das funktioniert aber nicht, wird einfach ignoriert.

    Wenn ich den gleichen Ausdruck im SQL ManagementStudio benutze funktioniert es.

    Was mache ich falsch?
    Etwas umständlich, aber so kann man nach dem Jahr in einer DataColumn filtern:

    VB.NET-Quellcode

    1. Me.DataTableBindingSource.Filter = "SUBSTRING(CONVERT(DatumDataColumnName,System.String),7,4) = '2010'"

    Damit sind dann auch beliebige andere Datumsbestandteile herausfilterbar.

    Bitte beachten:
    - CurrentCulture ist hier auf de-DE eingestellt, die Datumskonvertierung erfolgt daher zum Format "dd.MM.yyyy"
    - Der Startindex von SUBSTR(...) ist 1, nicht 0
    - Extrahieren des Jahres erfolgt somit ab Position 7

    Die Umwandlung funktioniert natürlich auch mit anderene Datentypen der DataColumn, wenn nur ein Teilwert bei der Filterung berücksichtigt werden soll.
    @ErfinderDesRades
    Ja, ist in Deinem Tut sehr schön dargestellt.
    In meinem Beispiel kann der Part "... = '2010'" aber auch prima gegen ".. LIKE '*2*'" oder so ausgetauscht werden.
    Das würde dann alle Datumse auswählen, wo in der String-Darstellung irgendwo "2" vorkommt.
    Und natürlich kann '2010' oder '2' durch eine Variable ersetzt werden
    Das kann bei dynamischen Filtern mit z.B. einer Textbox und Anbindung an ein Datagridview ganz hilfreich sein.
    Und wenn man dann noch eine Textbox je DGV-Spalte nimmt, und die Filter addiert ... dann kann man auch aus 10.000enden von Datensätzen
    sehr komfortabel z.B. in einer Buchhaltung die Zahlung von "Hein Mück" für "Laptop" gekauft bei "Mississippi" blitzschnell herausfiltern.

    Edit: Das funktioniert natürlich (leider) nicht bei Combobox-Spalten. Hillfsösung: In der DataTable eine berechnete Spalte mit Verweis auf den anzuzeigenden Wert in der Lookup-Tabelle anfügen.
    Hallo,

    vielen Dank, damit komme ich erstmal weiter.
    Hier noch der Vollständigkeit halber welche Lösung ich genommen habe:

    VB.NET-Quellcode

    1. strFilterString = "SUBSTRING(CONVERT(Datum,System.String),7,4) LIKE '%" & txtDatumJahr.Text & "%'"

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „stepper71“ ()