Datagridview nach Datum Filtern, Werte in einem Bestimmten Zeitraum

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Datagridview nach Datum Filtern, Werte in einem Bestimmten Zeitraum

    Hi!
    Ich habe eine Datengebundene Datagridview und ich will meine Tabelle nur nach bestimmte Datum anzeigen lassen.
    Ich würde den Wert "von" aus DateTimePicker1 holen und den Wert "bis" aus "DateTimePicker2".
    Aber ich komme damit nicht klar!
    Hab mir mal folgenden Code angeschaut:

    VB.NET-Quellcode

    1. Private Sub RefreshGridEinnahme()
    2. FillGrid(Grid3, "select * from Einnahme order by Datum desc", "Einnahme")
    3. End Sub
    4. Private Sub Saldoübersicht_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. '
    6. conn = New OleDbConnection
    7. conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DBHB.accdb; Persist Security Info=False;"
    8. 'Connection öfnen
    9. conn.Open()
    10. 'Aktualisieren Gried mit Tabelle-Einnahme / Tabelle-Ausgabe
    11. RefreshGridEinnahme()
    12. RefreshGridAusgabe()
    13. AusgabeBerechnen()
    14. EinnahmeBerechnen()
    15. SaldoBerechnen()
    16. End Sub
    17. Private Sub ButtonAnzeigen_Click(sender As Object, e As EventArgs) Handles ButtonAnzeigen.Click
    18. Dim ci As New CultureInfo("en-US")
    19. Dim dt1 = Me.DateTimePickerStart.Value.ToString("#MM/dd/yyyy#", ci)
    20. Dim dt2 = Me.DateTimePickerEnd.Value.ToString("#MM/dd/yyyy#", ci)
    21. Dim Filter = String.Format("Datum >= {0} And Datum <= {1}", dt1, dt2)
    22. Grid3.Filter("Datum >= ? And Datum <= ?", dt1.Value, dt2.Value)
    23. AusgabeBerechnen()
    24. EinnahmeBerechnen()
    25. SaldoBerechnen()
    26. End Sub


    Ich würde mich sehr freuen wenn mir jemand helfen könnte! ^^ :saint:
    hallo,
    ich habe mein Problem immer noch. :( . Mein bisheriger Code:

    VB.NET-Quellcode

    1. Public conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DBHB.accdb; Persist Security Info=False;")

    VB.NET-Quellcode

    1. ​Private Sub RefreshGridEinnahme()
    2. FillGrid(Grid3, "select * from Einnahme order by Datum desc", "Einnahme")
    3. End Sub

    VB.NET-Quellcode

    1. Private Sub ButtonAnzeigen_Click(sender As Object, e As EventArgs) Handles ButtonAnzeigen.Click
    2. conn.Open()
    3. Dim ci As New CultureInfo("en-US")
    4. Dim dt1 = Me.DateTimePickerStart.Value.ToString("#MM/dd/yyyy#", ci)
    5. Dim dt2 = Me.DateTimePickerEnd.Value.ToString("#MM/dd/yyyy#", ci)
    6. Dim Filter = String.Format("Datum >= {0} And Datum <= {1}", dt1, dt2)
    7. Grid3.DataSource.Filter("Datum >= ? And Datum <= ?", dt1, dt2)
    8. conn.Close()
    9. RefreshGridEinnahme()
    10. RefreshGridAusgabe()
    11. AusgabeBerechnen()
    12. EinnahmeBerechnen()
    13. SaldoBerechnen()
    14. End Sub


    Ich habe keine Erfahrung in VB.NET. wenn jemand für mich ein Beispiel hat, würde ich mich sehr freuen. :rolleyes:
    Vielen Dank im Voraus.
    Nja er möchte Werte eines bestimmten Zeitraums filtern.

    @Angel du wandelst das Datum direkt in einen String um, dadurch gehen alle wichtigen Auswertungsoptionen verloren. Wenn du ein Datum als Date speicherst kannst du leicht überprüfen ob ein Wert innerhalb eines Zeitraums liegt oder eben nicht. Allerdings schaut es so aus, als ob du dir erst noch die Grundlagen aneignen musst. Wenn du erstmal weißt, wodurch sich ein String von Date unterscheidet kannst du auch dein Problem lösen.

    Stehen denn schon Daten in deinem Datagridview?

    PS: Option Strict = on würde deinem Code gut tun, auch wenn du erstmal eine ganze Menge Fehlermeldungen bekommst.
    Option strict = on

    If it's stupid and it works it ain't stupid.

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Module Module1
    3. Public conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DBHB.accdb; Persist Security Info=False;")
    4. Public Sub FillGrid(Grid1 As DataGridView, cmd As String, TableName As String)
    5. Dim c As New OleDbCommand
    6. c.Connection = conn
    7. c.CommandText = cmd
    8. Dim ds As New DataSet
    9. Dim da As New OleDbDataAdapter(c)
    10. da.Fill(ds, TableName)
    11. Grid1.DataSource = ds
    12. Grid1.DataMember = TableName
    13. End Sub
    14. End Module


    VB.NET-Quellcode

    1. Public Class Saldoübersicht
    2. Private Sub RefreshGridAusgabe()
    3. FillGrid(Grid4, "select * from Ausgabe order by Datum desc", "Ausgabe")
    4. End Sub
    5. Private Sub RefreshGridEinnahme()
    6. FillGrid(Grid3, "select * from Einnahme order by Datum desc", "Einnahme")
    7. End Sub
    8. Private Sub Saldoübersicht_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    9. Dim dtm As Date
    10. conn.Open()
    11. dtm = DateTimePickerEnd.Value
    12. DateTimePickerStart.Value = DateAdd("m", -3, dtm)
    13. RefreshGridEinnahme()
    14. RefreshGridAusgabe()
    15. conn.Close()
    16. End Sub
    17. Private Sub Grid3_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles Grid3.CellContentClick
    18. RefreshGridEinnahme()
    19. End Sub
    20. Private Sub Grid4_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles Grid4.CellContentClick
    21. RefreshGridAusgabe()
    22. End Sub
    23. Private Sub ButtonAnzeigen_Click(sender As Object, e As EventArgs) Handles ButtonAnzeigen.Click
    24. conn.Open()
    25. Dim ci As New CultureInfo("en-US")
    26. Dim dt1 = Me.DateTimePickerStart.Value.ToString("#dd/MM/yyyy#", ci)
    27. Dim dt2 = Me.DateTimePickerEnd.Value.ToString("#dd/MM/yyyy#", ci)
    28. Dim Filter = String.Format("Datum >= {0} And Datum <= {1}", dt1, dt2)
    29. Grid3.DataSource.Filter("Datum >= ? And Datum <= ?", dt1, dt2)
    30. conn.Close()
    31. End Sub
    32. End Class


    Mein Problem ist, dass ich keine Ahnung habe, wie ich meine Tabelle nur nach bestimmte Datum anzeigen lassen kann. Ich würde den Wert "von" aus DateTimePickerStart holen und den Wert "bis" aus "DateTimePickerEnd". Das ist alles, was ich habe, leider funktioniert das nicht. wahrscheinlich ist das alles falsch. ;(


    Nils_Kr schrieb:

    Stehen denn schon Daten in deinem Datagridview?
    Ja. Die Kommunikation funktioniert ohne Problem..
    jo, jetzt sieht man den Fehler: Du verwendest keine BindingSources. Es sind aber die Bindingsources, mit denen man filtert, nur die haben eine Filter-Property.

    Du kannst nicht einfach irgendwo .Filter("Datum >= ? And Datum <= ?", dt1, dt2) hinten anhängen, und denken, nun filtert es.

    probierma so:

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Module Module1
    3. Public conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DBHB.accdb; Persist Security Info=False;")
    4. Public Sub FillBindingSource(bs As BindingSource, cmd As String, TableName As String)
    5. Dim c As New OleDbCommand
    6. c.Connection = conn
    7. c.CommandText = cmd
    8. Dim ds As New DataSet
    9. Dim da As New OleDbDataAdapter(c)
    10. da.Fill(ds, TableName)
    11. bs.DataSource = ds
    12. bs.DataMember = TableName
    13. End Sub
    14. End Module
    15. ' --------------------------------------------------------------
    16. Public Class Saldoübersicht
    17. Private _BindingSource As New BindingSource
    18. Private Sub RefreshGridAusgabe()
    19. FillBindingSource(_BindingSource, "select * from Ausgabe order by Datum desc", "Ausgabe")
    20. End Sub
    21. Private Sub RefreshGridEinnahme()
    22. FillBindingSource(_BindingSource, "select * from Einnahme order by Datum desc", "Einnahme")
    23. End Sub
    24. Private Sub Saldoübersicht_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    25. DateTimePickerStart.Value = DateTimePickerEnd.Value.addMonth(-3)
    26. Grid3.DataSource = _BindingSource
    27. End Sub
    28. Private Sub Grid3_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles Grid3.CellContentClick
    29. RefreshGridEinnahme()
    30. End Sub
    31. Private Sub Grid4_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles Grid4.CellContentClick
    32. RefreshGridAusgabe()
    33. End Sub
    34. Private Sub ButtonAnzeigen_Click(sender As Object, e As EventArgs) Handles ButtonAnzeigen.Click
    35. Dim dt1 = Me.DateTimePickerStart.Value
    36. Dim dt2 = Me.DateTimePickerEnd.Value
    37. _BindingSource.Filter = String.Format(CultureInfo.InvariantCulture, "Datum >= #{0}# And Datum <= #{1}#", dt1, dt2)
    38. End Sub
    39. End Class
    Das wesentliche ist, dass Fillgrid geändert wurde zu FillBindingSource, und dass das Grid nun an eine BindingSource angeschlossen ist.