DataGridView Filterfunktion + Summenzeile

toeller

Grünschnabel
Hallo Zusammen,

bin ein kompletter Neuling im Gebiet Visual Basic. Habe in letzter Zeit ein kleines Programm geschrieben, mit dem man eine Kostenstelleabfrage aus der Finanzbuchhaltung durchführen kann. Es funktioniert auch überaschenderweise sehr gut. Jetzt möchte ich gerne eine Filterfunktion einbauen, die funktionieren soll wie beim Excel der Autofilter. Außerdem muß ich noch eine Summenzeile ins Datagrid einbauen.

Wenn mir jemend behilflich sein kann mit der Filterfunktion und der Summenzeile wäre ich Euch sehr Dankbar.

Hier mein bisheriger Code:

Public Class Form1

Private MonatVorbesetztVon, MonatVorbesetztBis, JahrVorbesetztVon, JahrVorbesetztBis, vonJahr, bisJahr As Integer
Private KSt As String

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MonatVorbesetztVon = ComboBoxVonMonat.SelectedIndex = MonatVorbesetztVon + 1 'von Monat wird mit Januar vorbesetzt
JahrVorbesetztVon = Date.Now.Year 'von Jahr wird mit aktuellen Jahr vorbesetzt
MonatVorbesetztBis = CInt(Date.Now.Month) - 1 'bis Monat wird mit dem Vormonat vorbesetzt
JahrVorbesetztBis = Date.Now.Year 'bis Jahr wird mit dem aktuellen Jahr vorbesetzt

If Date.Now.Month = 1 Then 'Wenn der Monat Januar ist, dann
ComboBoxVonMonat.SelectedIndex = MonatVorbesetztVon
ComboBoxBisMonat.SelectedIndex = MonatVorbesetztBis + 11 'wird ComboBox von Monat mit Januar + 11, also mit Dezember vorbesetzt. Index beginnt immer mit 0
NumericUpDownVonJahr.Minimum = JahrVorbesetztVon - 1
NumericUpDownBisJahr.Minimum = JahrVorbesetztBis - 1 'wird NumericUpDown mit aktuellen Jahr - 1 Jahr vorbesetzt
Else 'Sonst
ComboBoxVonMonat.SelectedIndex = MonatVorbesetztVon
ComboBoxBisMonat.SelectedIndex = MonatVorbesetztBis - 1 'wird Combobox von Monat mit aktuellen Monat - 1 Monat vorbesetzt, also mit Vormonat
NumericUpDownVonJahr.Value = JahrVorbesetztVon
NumericUpDownBisJahr.Value = JahrVorbesetztBis 'wird NumericUpDown mit akutllen Jahr vorbesetzt
End If
End Sub

Sub EingabenHolen(ByRef Eingabefehler As Boolean) 'Prüfung der Eingabe, Boolean kann nur true oder false sein.

If TextBoxKSt.Text = "" Then 'Wenn der Vormonat größer ist als der bis Monat, dann
Eingabefehler = True 'Eingabefehler
End If
End Sub

Private Sub ButtonDatenholen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonDatenHolen.Click
Dim vonMonat As String
Dim bisMonat As String
Dim Anfangsdatum As String
Dim Enddatum As String

Dim eingabefehler As Boolean
EingabenHolen(eingabefehler)
If eingabefehler Then
MsgBox("Bitte eine Kostenstelle eingeben")
Exit Sub
End If

KSt = TextBoxKSt.Text

vonMonat = ComboBoxVonMonat.SelectedIndex + 1
bisMonat = ComboBoxBisMonat.SelectedIndex + 1

vonJahr = NumericUpDownVonJahr.Value
bisJahr = NumericUpDownBisJahr.Value

Anfangsdatum = "01." + vonMonat.ToString + "." + vonJahr.ToString()
Enddatum = Date.DaysInMonth(bisJahr, bisMonat).ToString + "." + bisMonat.ToString + "." + bisJahr.ToString

Dim ds As DataSet
Dim conn As SqlConnection
Dim constr As String = "Data Source=Majestix\lohn;Initial Catalog=XRWKusser;Integrated Security=True"
ds = New DataSet
conn = New SqlConnection(constr)



Dim Kontenzuordnung As String 'FIBU-Abfragen Zeilen

Kontenzuordnung = "SELECT b.Buchungsdatum, b.Belegdatum, b.Beleg, k.Kontonummer, k.Bezeichnung, t.Kostenstelle, t.Bezeichnung AS Expr1, b.Text, s.BetragSoll, s.BetragHaben"
Kontenzuordnung += " FROM BelegeKSt AS s INNER JOIN"
Kontenzuordnung += " BelegeSH AS b ON b.ObjectID = s.ObjectIDBelegeSH INNER JOIN"
Kontenzuordnung += " Konto AS k ON k.ObjectID = s.ObjectIDKonto INNER JOIN"
Kontenzuordnung += " Kostenstelle AS t ON t.ObjectID = s.ObjectIDKSt"
Kontenzuordnung += " WHERE (b.Buchungsdatum BETWEEN ' " + Anfangsdatum + "' AND '" + Enddatum + "')AND (t.Kostenstelle=" + KSt + ")"
Kontenzuordnung += " Order by b.Buchungsdatum"




Dim daKontenzuordnung As New SqlDataAdapter(Kontenzuordnung, conn)

Try
conn.Open()
daKontenzuordnung.Fill(ds, "FIBU-Abfragen")

conn.Close()
Catch ex As Exception
MsgBox("Keine Daten aus der SQL-Anweisung")
End Try



DataGridView1.Rows.Clear()
Dim dt As DataTable = ds.Tables.Item("FIBU-Abfragen") 'FIBU-Abfragen ist hier nur ein Text ohne einen Bezug
Dim lrow As DataRow



For Each lrow In dt.Rows
DataGridView1.Rows.Add(lrow.Item("Buchungsdatum"), lrow.Item("Belegdatum"), lrow.Item("Beleg"), lrow.Item("Kontonummer"), lrow.Item("Bezeichnung"), lrow.Item("Kostenstelle"), lrow.Item("Expr1"), lrow.Item("Text"), lrow.Item("BetragSoll"), lrow.Item("BetragHaben"))

Next




End Sub


End Class
 

Neue Beiträge

Zurück