vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Datensätze per loop eintragen 
Autor: ERBRU
Datum: 08.09.19 11:16

ich habe eine Tabelle (Arbeitszeit) hier dokumentiere ich je Tag meine Arbeitszeit

nun möchte ich gerne das zum Beispiel ich Datum: von bis auswähle und das der Tabelle hinzufügen

Mo. 02.09.2019 bis Fr. 06.09.2019
jetzt der Tabelle anhängen: wenn ein Button gedrückt wird (Standardzeiten eintragen)
Mo. 02.09.2019 Beginn 07:30 Ende 16:00 Pause 45 Soll AZ 408 Bemerkung: Anwesend
Di. 03.09.2019 Beginn 07:30 Ende 16:00 Pause 45 Soll AZ 408 Bemerkung: Anwesend
Mi. 04.09.2019 Beginn 07:30 Ende 16:00 Pause 45 Soll AZ 408 Bemerkung: Anwesend
Do. 05.09.2019 Beginn 07:30 Ende 16:00 Pause 45 Soll AZ 408 Bemerkung: Anwesend
Fr. 06.09.2019 Beginn 07:30 Ende 16:00 Pause 45 Soll AZ 408 Bemerkung: Anwesend
Sa. 07.09.2019 mit Beginn 00:00 Ende 00:00 Pause 0 Soll AZ 0 Bemerkung: WE
So. 08.09.2019 mit Beginn 00:00 Ende 00:00 Pause 0 Soll AZ 0 Bemerkung: WE

wäre schön wenn da einer eine Idee hätte, macht Sinn da es sich um Standardzeiten handelt
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensätze per loop eintragen 
Autor: ERBRU
Datum: 08.09.19 17:15

ich habe mal versucht ein Beispiel zu basteln, es macht noch nicht ganz was ich möchte

ich möchte ja das er ab Startdatum bis Enddatum in die Tabelle anlegt
nicht wie jetzt ein Datum (Datenzeile) hinzufügen.



Public Class Form1
    Private mDT As DataTable
    Private WithEvents mBS As BindingSource
    Private WithEvents DGV As DataGridView
    Private WithEvents btnAddNew As Button
    Private Rnd As New Random
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        CreateControls()
        CreateData()
 
        With DGV
            .DataSource = mBS
            .Columns(0).DefaultCellStyle.Alignment = _
            DataGridViewContentAlignment.MiddleRight
            .Columns(2).DefaultCellStyle.Format = "dd.MM.yyyy"
            .Columns(2).DefaultCellStyle.NullValue = ""
            .Columns(3).DefaultCellStyle.Format = "HH:mm"
            .Columns(3).DefaultCellStyle.NullValue = "00:00"
            .Columns(4).DefaultCellStyle.Format = "HH:mm"
            .Columns(4).DefaultCellStyle.NullValue = "00:00"
            .AutoResizeColumns()
            .AutoResizeRows()
        End With
        mBS.Position = mBS.Count - 1
    End Sub
 
    Private Sub btnAddNew_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles btnAddNew.Click
 
        Dim D As Date = _
        Date.Today.AddDays(Rnd.Next(0, 1))
 
        Dim DR As DataRow = mDT.NewRow
        Dim NewID As Integer = GetNewID()
        DR.Item(0) = NewID
        DR.Item(1) = Format(D, "ddd")
        DR.Item(2) = D
        DR.Item(3) = Format(Now, "HH:mm")
        DR.Item(4) = Format(Now, "HH:mm")
        mDT.Rows.Add(DR)
 
        Dim Pos As Integer = _
        mBS.Find("ID", NewID)
 
        mBS.Position = Pos
    End Sub
 
    Private Sub CreateData()
        Dim i As Integer
        Dim DR As DataRow
 
        mDT = New DataTable
        With mDT
            .Columns.Add("ID", GetType(Integer))
            .Columns(0).AllowDBNull = False
            .Columns(0).Unique = True
            .Columns.Add("Tag", GetType(String))
            .Columns.Add("Datum", GetType(Date))
            .Columns.Add("Start", GetType(Date))
            .Columns.Add("Ende", GetType(Date))
            Dim D As Date
            For i = 1 To 15
                D = Date.Today.AddDays _
                (Rnd.Next(0, 5))
 
                DR = .NewRow
                DR.Item(0) = i
                DR.Item(1) = Format(D, "ddd")
                DR.Item(2) = D
                DR.Item(3) = Format(Now, "HH:mm")
                DR.Item(4) = Format(Now, "HH:mm")
                .Rows.Add(DR)
            Next
            .AcceptChanges()
        End With
 
        mBS = New BindingSource
        mBS.DataSource = mDT
        mBS.Sort = "ID"
    End Sub
 
    Private Function GetNewID() As Integer
        Dim DV As DataView = _
        DirectCast(mBS.List, DataView)
 
        Dim DRV As DataRowView
        Dim ID As Integer
        For Each DRV In DV
            If DRV.Item(0) IsNot DBNull.Value Then
 
                Dim i As Integer = _
                CType(DRV.Item(0), Integer)
 
                If i > ID Then
                    ID = i
                End If
            End If
        Next
        Return ID + 1
    End Function
 
    Private Sub CreateControls()
        Me.Size = New Size(650, 670)
        DGV = New DataGridView
        With DGV
            .SetBounds _
            (10, 10, _
            Me.ClientSize.Width - 20, _
            Me.ClientSize.Height - 70)
 
            .Anchor = AnchorStyles.Left Or _
            AnchorStyles.Top Or _
            AnchorStyles.Right Or _
            AnchorStyles.Bottom
 
            .DefaultCellStyle.Font = _
            New Font("Arial", 12)
 
            .ColumnHeadersDefaultCellStyle.Font = _
            New Font("Arial", 8, FontStyle.Bold)
        End With
        Me.Controls.Add(DGV)
 
        btnAddNew = New Button
        With btnAddNew
            .SetBounds _
            (Me.ClientSize.Width - 110, _
            DGV.Bottom + 10, _
            100, 40)
 
            .Anchor = AnchorStyles.Right Or _
            AnchorStyles.Bottom
 
            .Text = "Add New"
        End With
        Me.Controls.Add(btnAddNew)
    End Sub
 
    Private Sub mBS_PositionChanged _
    (ByVal sender As Object, _
    ByVal e As System.EventArgs _
    ) Handles mBS.PositionChanged
 
        If mBS.Position > -1 Then
            Dim DR As DataRow
            Dim DRV As DataRowView
 
            DRV = DirectCast(mBS.Current, DataRowView)
            DR = DRV.Row
 
            Me.Text = DR.Item(0).ToString & "; " & _
            DR.Item(1).ToString & "; " & _
            DR.Item(2).ToString
        End If
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensätze per loop eintragen 
Autor: HenryV
Datum: 09.09.19 12:12

Ich hab einmal weiter gebastelt.

Die Datatable ergänzt mit Zusatzspalten und Autoinkrement:
mDT = New DataTable
With mDT
    .Columns.Add("ID", GetType(Integer))
    .Columns(0).AutoIncrement = True
    .Columns(0).AllowDBNull = False
    .Columns(0).Unique = True
 
    .Columns.Add("Tag", GetType(String))
    .Columns.Add("Datum", GetType(Date))
    .Columns.Add("Start", GetType(Date))
    .Columns.Add("Ende", GetType(Date))
    .Columns.Add("Pause", GetType(Integer))
    .Columns.Add("Soll AZ", GetType(Integer))
    .Columns.Add("Bemerkung", GetType(String))
    .AcceptChanges()
End With
und den AddNew-Button mit
Private Sub btnAddNew_Click(ByVal sender As Object, ByVal e As _
  System.EventArgs) Handles btnAddNew.Click
 
    Dim DateFrom As Date = New Date(2019, 9, 16)
    Dim DateTo As Date = New Date(2019, 9, 22)
    Dim n As Integer = CInt((DateTo.Date - DateFrom.Date).TotalDays)
 
    For i As Integer = 0 To n
 
        Dim D As Date = DateFrom.Date.AddDays(i)
 
        Dim DR As DataRow = mDT.NewRow
        'DR.Item(0) = Nothing
        DR.Item(1) = D.ToString("ddd")
        DR.Item(2) = D
 
        If D.DayOfWeek = DayOfWeek.Saturday Or D.DayOfWeek = DayOfWeek.Sunday _
          Then
            DR.Item(3) = D
            DR.Item(4) = D
            DR.Item(5) = New TimeSpan(0, 0, 0).TotalMinutes
            DR.Item(6) = New TimeSpan(0, 0, 0).TotalMinutes
            DR.Item(7) = "WE"
        Else
            DR.Item(3) = D.Add(New TimeSpan(7, 30, 0))
            DR.Item(4) = D.Add(New TimeSpan(16, 0, 0))
            DR.Item(5) = New TimeSpan(0, 45, 0).TotalMinutes
            DR.Item(6) = New TimeSpan(6, 48, 0).TotalMinutes
            DR.Item(7) = "Anwesend "
        End If
 
        mDT.Rows.Add(DR)
    Next
 
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensätze per loop eintragen 
Autor: ERBRU
Datum: 09.09.19 14:51

Hallo HenryV,

Super so hatte ich es gewünscht.

so könnte ich auch einen x beliebigen Zeitraum nachtragen.

Danke!

lässt sich das auch prüfen ? Daten bereits eingetragen Datum von bis ?

dann wäre es doch perfekt!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensätze per loop eintragen 
Autor: HenryV
Datum: 09.09.19 16:27

Du kannst noch eine Abfrage einbauen.
z.B. so
...
For i As Integer = 0 To n
    Dim D As Date = DateFrom.Date.AddDays(i)
    'Abfrage ob Datum schon vorhanden ist
    If mDT.Select("Datum = '" & D & "'").Count = 0 Then 
        Dim DR As DataRow = mDT.NewRow
        ...
        mDT.Rows.Add(DR)
    End If
Next
...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensätze per loop eintragen 
Autor: ERBRU
Datum: 09.09.19 18:51

Supi, Danke habs umgesetzt läuft
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2019 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