| |
VB.NET - FortgeschritteneDatensä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 | |
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 | |
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 | |
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! | |
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
... | |
Re: Datensätze per loop eintragen | | | Autor: ERBRU | Datum: 09.09.19 18:51 |
| Supi, Danke habs umgesetzt läuft | |
| 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 |
|
|
sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|