| |
VB.NET - Ein- und UmsteigerFilterstring | | | Autor: Knabber | Datum: 29.01.19 16:26 |
| Hallo
Leider bin Ich schon wieder auf ein Problem gestoßen.
Ich möchte aus einer Tabelle eine Summe bilden mit 2 abhängigkeiten
Die Tabelle ist "Eintraege"
gebunden über Bindingsource,Dataset,AccessDB
In der tabelle sind Spalten u.a.
Jahr.............String z.b. 2019, 2020 usw
Monat............String z.b. Januar, Februar, usw.
Einnahmen........Currency (C2) z,b. 32,95
Ausgaben.........Currency (C2) z,b. 32,95
Ich bekomme es nicht auf die Reihe Die Summe aus der Tabelle "Eintraege"
"Einnahmen" nur aus dem Monat Januar und dem Jahr 2019 zu bekommen
und in eine Textbox anzuzeigen.
Dim SumJanuar As HaushaltskasseDataSet.Eintraege.Where Jahr= "2019" And _
Monat="Januar".Sum
tbx_Summe_Januar.Text = SumJanuar Diesen Code hab ich mir zusammengereimt. Leider ohne Erfolg. Ich komme mit diesem Code nicht weiter,
gibt aber auch keine Fehlermeldung
Weiss jemand weiter ?
Gruß
SA | |
Re: Filterstring | | | Autor: Manfred X | Datum: 30.01.19 12:40 |
| Hallo!
Deine Tabelle ist im Hinblick auf Datentypen ungeeignet spezifiziert (DateTime).
Aus diesem Grund werden Konvertierungen benötigt.
Das geht nicht über den Filterstring.
Der Currency-Typ wird in VB.Net gewöhnlich als Decimal abgebildet.
Hier ein untypisiertes Beispiel (Windows.Forms):
Public Class frmDemo
Dim dt As New DataTable
Private Sub frmDemo_Load(sender As Object,
e As EventArgs) Handles MyBase.Load
'Einige Testdaten
dt.Columns.Add("Jahr", GetType(String))
dt.Columns.Add("Monat", GetType(String))
dt.Columns.Add("Einnahmen", GetType(Decimal))
Dim rndm As New Random(1234)
For i As Integer = 1 To 1000
dt.Rows.Add(rndm.Next(2016, 2020).ToString,
rndm.Next(1, 13).ToString,
CDec(rndm.Next(50, 150)))
Next i
Dim jahr, monat, rowcount As Integer
Dim summe As Decimal
For i As Integer = 0 To dt.Rows.Count - 1
Dim row As DataRow = dt.Rows(i)
'Konvertieren
If Integer.TryParse(row.Field(Of String)("Jahr"), jahr) AndAlso
Integer.TryParse(row.Field(Of String)("Monat"), monat) Then
'Auswahlbedingungen prüfen
If jahr = 2019 AndAlso monat = 1 Then
summe += row.Field(Of Decimal)("Einnahmen")
rowcount += 1
End If
End If
Next i
End Sub
End Class | |
Re: Filterstring | | | Autor: Knabber | Datum: 30.01.19 12:44 |
| Danke
Ich hab es selber hinbekommen
Dim Januar_Einnahmen = (From r In HaushaltskasseDataSet.Eintraege Where _
r.Monat = "Januar" And r.Jahr = cbx_Jahr.Text Select r.Betrag_Einnahmen).Sum( _
)
tbx_Januar_Einnahmen.Text = CStr(Januar_Einnahmen) Vielen Dank
SA | |
Re: Filterstring | | | Autor: Manfred X | Datum: 30.01.19 12:48 |
| Ich hatte übersehen, daß bei der Tabelle
Monatsnamen eingetragen sind. Bei dieser Spalte entfällt
deshalb die Integer-Konvertierung in meinem Beispiel.
Diese Tabelle ist vermutlich eine unsichere Sache.
Jahresangaben als String und Monatsnamen sind Fehlerbedingungen,
falls Tippfehler bei der Dateneingabe im Erfassungsprogramm
nicht abgefangen worden sind.
Dein LINQ-Code kann Eingabefehler nachträglich nicht identifizieren.
Dafür wären zusätzliche Überprüfungen erforderlich.
Beitrag wurde zuletzt am 30.01.19 um 12:57:23 editiert. | |
Re: Filterstring | | | Autor: Knabber | Datum: 30.01.19 14:37 |
| Ja, das stimmt
in der Tabelle ist aber das ganz normale Datum (Date mitenthalten)
Ich habe nur (Monat as String) und (Jahr als String) zusätzlich mit aufgenommen wegen der leichteren Filterung und für mich zur besseren übersicht.
Es existiert ja eine Spalte "Datum" as Shortdate
Man hätte auch aus der Spalte "Datum" alles auseinandernehmen können und somit nach Monat und Jahr filtern können
aber für mich als Abfänger noch zu kompliziert (z.B Aus Datum den Monat,Jahr rauszufiltern und dann daraus die Beträge zu addieren
Es funktioniert so ganz gut. Jedenfalls weiss ich was da passiert.
Vielen Dank für Deine Mühe
SA | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere Infos
|
|
|
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
|
|