| |
VB.NET - Ein- und UmsteigerDatediff berechnen | | | Autor: Orwell | Datum: 14.08.17 23:02 |
| Hallo Form,
ich möchte mehrere Daten (Geburtstage) auf ihr alter in Tagen Überprüfen. Hier im Forum habe ich Folgenden Code gefunden: Dim dHeute As Date = DateTime.Now.Date
Dim dDatum As Date = New Date(2000, 11, 1)
Dim dateDiff As TimeSpan = dDatum - dHeute Die Daten lade ich aus einer CSV in ein DatagridPublic Class Form1
Dim dt As New cDataTableCSV
Dim bs As New BindingSource
Dim dgv As New DataGridView With {.Parent = Me, .DataSource = bs, .Top = _
50, .Width = 464, .Height = 509}
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim sAppPath As String
sAppPath = Application.StartupPath
Me.Size = New Size(480, 597)
If Not dt.LoadFile(sAppPath & "\Birthday.csv", _
System.Text.Encoding.UTF7) Then
MsgBox("Datei konnte nicht geladen werden")
Else
dt.Columns(0).ColumnName = "Name"
dt.Columns(1).ColumnName = "Geburtstag"
dt.Columns(2).ColumnName = "Tage"
dt.Columns(3).ColumnName = "Zeit bis"
bs.DataSource = dt
End If
End Sub
End Class Option Strict On : Option Explicit On : Option Infer Off
Public Class CSV
Inherits System.Data.DataTable
Public Function LoadFile(ByVal filename As String, _
ByVal textencoder As System.Text.Encoding, _
Optional ByVal FeldTrennzeichen As Char = ";"c, _
Optional ByVal ZeilenTrennzeichen As String = _
Microsoft.VisualBasic.vbNewLine) As Boolean
Me.Rows.Clear() : Me.Columns.Clear()
Try
'Zeilen lesen
Dim lines() As String = System.IO.File.ReadAllLines(filename, _
textencoder)
'Maximale Feldzahl pro Zeile
Dim fields() As String, maxfields As Integer = 0
For i As Integer = 0 To lines.GetUpperBound(0)
If lines(i) <> String.Empty Then
fields = lines(i).Split(FeldTrennzeichen)
maxfields = System.Math.Max(maxfields, fields.Length)
End If
Next i
If maxfields < 1 Then Return False
Me.Columns.Add("Name", GetType(String))
Me.Columns.Add("Geburtstag", GetType(String))
Me.Columns.Add("Tage", GetType(String))
Me.Columns.Add("Zeit bis", GetType(String))
'Datatable: Zeilen füllen
Dim r As System.Data.DataRow
For i As Integer = 0 To lines.GetUpperBound(0)
If lines(i) <> String.Empty Then
fields = lines(i).Split(FeldTrennzeichen)
System.Array.Resize(fields, maxfields)
r = Me.NewRow
For k As Integer = 0 To maxfields - 1
If String.IsNullOrEmpty(fields(k)) Then
r(k) = String.Empty
Else
r(k) = fields(k).Trim
End If
Next k 'Felderschleife
Me.Rows.Add(r)
End If
Next i
Return Me.Rows.Count > 0
Catch ex As System.Exception
Return False
End Try
End Function
Public Sub AddColumn()
Dim k As Integer = Me.Columns.Count
'Dim cn As String = "SP_" & CStr(k)
Dim cn As String = "SP_" & CStr(k)
Me.Columns.Add(cn, GetType(String))
For i As Integer = 0 To Me.Rows.Count - 1
Me.Rows(i).Item(k) = String.Empty
Next i
End Sub
End Class Leider verstehe ich nicht, wie ich beim Start die Datediff einbauen muss, das er den Unterschied berechnet ? | |
Re: Datediff berechnen | | | Autor: sv00010 | Datum: 15.08.17 17:59 |
| Zitat: | |
Leider verstehe ich nicht, wie ich beim Start die Datediff einbauen muss, das er den Unterschied berechnet ?
| |
Die Datei muss im Verzeichnis liegen, in welchem das Programm ausgeführt wird.
Die Function wird vom Load-Event des Formulars aufgerufen.
Ich würde nicht empfehlen, dass mit dem Datediff da jetzt irgendwie reinzuwürgen.
Als erstes in einer Function die Daten ausrechnen (als Array oder Liste mit zurückgeben)
und dann im zweiten Teil das fertige Ergebnis anzeigen.
Beitrag wurde zuletzt am 15.08.17 um 18:09:36 editiert. | |
Beispiel: Berechnung für Geburtstage | | | Autor: Manfred X | Datum: 20.08.17 08:24 |
| Hallo!
Nutze cDatatableCSV in der "Originalversion".
Beispiel für den Inhalt der CSV-Datei:
Hans;31.3.1946
Günther;12.5.1982
Willy;26.5.2010
Peter;1.8.2017
Public Class frmExpressionColumn
Dim WithEvents btnLoad As New Button With _
{.Parent = Me, .Text = "Laden"}
Dim dt As cDataTableCSV, bs As New BindingSource
Dim dgv As New DataGridView With _
{.Parent = Me, .Top = 50, .Width = 300, _
.DataSource = bs, .ColumnHeadersHeight = 40}
Private Sub btnLoad_Click(sender As Object, _
e As System.EventArgs) Handles btnLoad.Click
If dt IsNot Nothing Then
'geladene Tabelleninstanz entsorgen
dt.Clear() : dt.Dispose() : dt = Nothing
End If
bs.DataSource = Nothing
dt = New cDataTableCSV
Dim AlterInTagen As String = _
"AlterInTagen (am " & Today.ToString("dd.MM.yy") & ")"
Const TageBisGeburtstag As String = "TageBisGeburtstag"
If Not dt.LoadFile _
("C:\daten\birthday.csv", System.Text.Encoding.UTF8) Then
MsgBox("Datei konnte nicht geladen werden", MsgBoxStyle.Exclamation)
Else
'Spaltenbezeichnung anpassen
dt.Columns(0).ColumnName = "Name"
dt.Columns(1).ColumnName = "Geburtstag"
'zusätzliche Spalte
dt.Columns.Add(AlterInTagen, GetType(Integer))
dt.Columns(AlterInTagen).AllowDBNull = True
dt.Columns.Add(TageBisGeburtstag, GetType(Integer))
Dim gt As Date
For i As Integer = 0 To dt.Rows.Count - 1
If Date.TryParse(dt.Rows(i)("Geburtstag").ToString, gt) Then
dt.Rows(i)(AlterInTagen) = _
(Today.Date.Ticks - gt.Date.Ticks) / TimeSpan.TicksPerDay
'nächste Geburtstagsfeier im aktuellen oder im nächsten Jahr
Dim gta As Date = New Date(Today.Year, gt.Month, gt.Day)
If gta < Today.Date Then gta = gta.AddYears(1)
dt.Rows(i)(TageBisGeburtstag) = _
(gta.Date.Ticks - Today.Date.Ticks) / TimeSpan.TicksPerDay
Else
'ungültiger Eintrag in Spalte Geburtstag
dt.Rows(i)(AlterInTagen) = DBNull.Value
dt.Rows(i)(TageBisGeburtstag) = DBNull.Value
End If
Next i
'Datenbindung erstellen
bs.DataSource = dt
End If
End Sub
End Class
Beitrag wurde zuletzt am 20.08.17 um 08:25:58 editiert. | |
| 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 |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|