Hallo liebe Profis
Ich brauchte mal wieder ein Problem und dachte mir ich versuche mich an einer Timeline - schwubbs war das Problem da
Im Prinzip wollte ich das ganze mit einem DGV lösen - sollte das vollkommen falsch sein habt bitte Nachsicht mit mir und teilt mir einen besseren Weg mit
Um das ganze mal grob zu umreißen - soweit bin ich bisher gekommen:
Links oben Start-Datum, rechts oben Ende-Datum.
In der mitte die 3 Textfelder 1: Arbeitstage 2: Gesamttage 3: Welcher Todo und somit Farbe ist ausgewählt.
Links 7 ToDo-Möglichkeiten samt Farben
Unten das erstellte DGV in das ich bereits reingemalt habe.
Ich weiß, jetzt werden viele erstmal wieder die Hände über ihrem Kopf zusammenschlagen, aber das ganze befindet sich ja noch in der Bastelphase - das wäre mein Code dazu:
Spoiler anzeigen
LG und schonmal Danke für kommenden Input,
DDD
Ich brauchte mal wieder ein Problem und dachte mir ich versuche mich an einer Timeline - schwubbs war das Problem da
Im Prinzip wollte ich das ganze mit einem DGV lösen - sollte das vollkommen falsch sein habt bitte Nachsicht mit mir und teilt mir einen besseren Weg mit
Um das ganze mal grob zu umreißen - soweit bin ich bisher gekommen:
- Man kann einen Zeitraum definieren (hab ich mit 2 DateTimePickern gemacht)
- Die Differenz zwischen den Tagen wird ermittelt (Gesamttage), Wochenenden werden abgezogen (Arbeitstage)
- Das DGV mit einer Reihe und entsprechend den Gesamttagen Spalten wird gefüllt. Headertext ist immer das Datum, nur am Wochenende steht WE im Header.
- Im DGV lassen sich mehrere Zellen markieren und einfärben (damit möchte ich die verschiedenen Todo's darstellen)
- Weitere Reihen lassen sich hinzufügen, falls sich Vorgänge überschneiden.
- Weitere Tage lassen sich hinzufügen falls sich das Projekt verlängern sollte
- Mit dem Mausrad lässt sich das DGV zur besseren übersicht bei längeren Timelines Zoomen
- Die letzte Spalte löschen
- Von markierter Zelle an zb 5 Spalten einfärben (als Alternative anstatt selber zu markieren direkt "Blöcke" füllen - zB ToDo2 dauert immer 5 Tage)
- Fast die wichtigste Frage : Kann man ein so erstelltes DGV überhaupt speichern ?
Links oben Start-Datum, rechts oben Ende-Datum.
In der mitte die 3 Textfelder 1: Arbeitstage 2: Gesamttage 3: Welcher Todo und somit Farbe ist ausgewählt.
Links 7 ToDo-Möglichkeiten samt Farben
Unten das erstellte DGV in das ich bereits reingemalt habe.
Ich weiß, jetzt werden viele erstmal wieder die Hände über ihrem Kopf zusammenschlagen, aber das ganze befindet sich ja noch in der Bastelphase - das wäre mein Code dazu:
VB.NET-Quellcode
- Dim GesamtTage As Integer
- Dim Number As String = 0
- Dim addende As String = 0
- Private Function GetWorkDays(ByVal StartDate As Date, ByVal EndDate As Date) As Long
- Dim Tage As Long = DateAndTime.DateDiff(DateInterval.Day, StartDate, EndDate)
- For N As Long = 0 To Tage
- If DateAndTime.DateAdd(DateInterval.Day, N, StartDate).DayOfWeek <> DayOfWeek.Saturday And
- DateAndTime.DateAdd(DateInterval.Day, N, StartDate).DayOfWeek <> DayOfWeek.Sunday Then
- GetWorkDays += 1
- End If
- Next
- End Function
- Function ISWeekend(Datum As Date) As Boolean
- ISWeekend = (Weekday(Datum) Mod 6 = 1)
- End Function
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Panel1.BackColor = Color.Red
- Panel2.BackColor = Color.Blue
- Panel3.BackColor = Color.Yellow
- Panel4.BackColor = Color.Green
- Panel5.BackColor = Color.Purple
- Panel6.BackColor = Color.Brown
- Panel7.BackColor = Color.Orange
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles tege_berech.Click
- TextBox1.Text = GetWorkDays(DateTimePicker1.Value, DateTimePicker2.Value).ToString
- Dim start As DateTime = DateTimePicker1.Value
- Dim ende As DateTime = DateTimePicker2.Value
- start = Strings.Left(start, 10)
- ende = Strings.Left(ende, 10)
- GesamtTage = ende.Subtract(start).Days
- TextBox3.Text = (GesamtTage.ToString)
- End Sub
- Private Sub Button2_Click(sender As Object, e As EventArgs) Handles DGV_fill.Click
- Dim start As DateTime = DateTimePicker1.Value
- Dim ende As DateTime = DateTimePicker2.Value
- start = Strings.Left(start, 10)
- ende = Strings.Left(ende, 10)
- DataGridView1.Columns.Add(1, start)
- For i = 0 To GesamtTage - 1
- Dim DataDatum As Date
- Dim StartDate As String
- Dim days As Double
- Dim SecondDate As Date
- Dim IntervalType As DateInterval
- IntervalType = DateInterval.Day
- StartDate = start
- SecondDate = CDate(StartDate)
- Number = Number + 1
- days = Val(Number)
- DataDatum = DateAdd(IntervalType, days, SecondDate)
- DataDatum = Strings.Left(DataDatum, 10)
- If ISWeekend(DataDatum) Then
- DataGridView1.Columns.Add(1, "Wochenende")
- Else
- DataGridView1.Columns.Add(1, DataDatum)
- End If
- Next i
- For Each col As DataGridViewColumn In DataGridView1.Columns
- col.SortMode = DataGridViewColumnSortMode.NotSortable
- Next
- End Sub
- Private Sub Button3_Click(sender As Object, e As EventArgs) Handles row_add.Click
- DataGridView1.Rows.Insert(0, 1)
- End Sub
- Private Sub Button4_Click(sender As Object, e As EventArgs) Handles colorieren.Click
- DataGridView1.CurrentRow.DefaultCellStyle.BackColor = Color.White
- For Each cell As DataGridViewCell In DataGridView1.SelectedCells
- If TextBox2.Text = "" Then
- MessageBox.Show("Bitte Kategorie wählen", "info", MessageBoxButtons.OK, MessageBoxIcon.Error)
- Exit Sub
- End If
- If TextBox2.Text = "ToDo1" Then cell.Style.BackColor = Color.Red
- If TextBox2.Text = "ToDo2" Then cell.Style.BackColor = Color.Blue
- If TextBox2.Text = "ToDo3" Then cell.Style.BackColor = Color.Yellow
- If TextBox2.Text = "ToDo4" Then cell.Style.BackColor = Color.Green
- If TextBox2.Text = "ToDo5" Then cell.Style.BackColor = Color.Purple
- If TextBox2.Text = "ToDo6" Then cell.Style.BackColor = Color.Brown
- If TextBox2.Text = "ToDo7" Then cell.Style.BackColor = Color.Orange
- Next
- DataGridView1.ClearSelection()
- End Sub
- Private Sub DataGridView1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseWheel
- If My.Computer.Keyboard.CtrlKeyDown Then
- Dim newHeight As Int32 = DataGridView1.RowTemplate.Height + (e.Delta / 120) * 2
- DataGridView1.RowTemplate.Height = newHeight
- For Each row As DataGridViewRow In DataGridView1.Rows
- row.Height = newHeight
- Next
- For Each col As DataGridViewColumn In DataGridView1.Columns
- col.Width += (e.Delta / 120) * 40
- Next
- Dim newFont As Font
- Try
- newFont = New System.Drawing.Font(Me.DataGridView1.Font.FontFamily, Me.DataGridView1.Font.Size + (e.Delta / 120) * 1, Me.DataGridView1.Font.Style, Me.DataGridView1.Font.Unit)
- Catch ex As Exception
- newFont = Me.DataGridView1.Font
- End Try
- Me.DataGridView1.Font = newFont
- DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
- DataGridView1.AutoResizeColumns()
- End If
- End Sub
- Private Sub Panel1_Click(sender As Object, e As EventArgs) Handles Panel1.Click
- TextBox2.Text = "ToDo1"
- End Sub
- Private Sub Panel2_Click(sender As Object, e As EventArgs) Handles Panel2.Click
- TextBox2.Text = "ToDo2"
- End Sub
- Private Sub Panel3_Click(sender As Object, e As EventArgs) Handles Panel3.Click
- TextBox2.Text = "ToDo3"
- End Sub
- Private Sub Panel4_Click(sender As Object, e As EventArgs) Handles Panel4.Click
- TextBox2.Text = "ToDo4"
- End Sub
- Private Sub Panel5_Click(sender As Object, e As EventArgs) Handles Panel5.Click
- TextBox2.Text = "ToDo5"
- End Sub
- Private Sub Panel6_Click(sender As Object, e As EventArgs) Handles Panel6.Click
- TextBox2.Text = "ToDo6"
- End Sub
- Private Sub Panel7_Click(sender As Object, e As EventArgs) Handles Panel7.Click
- TextBox2.Text = "ToDo7"
- End Sub
- Private Sub Button5_Click(sender As Object, e As EventArgs) Handles tage_add.Click
- Dim ende As DateTime = DateTimePicker2.Value
- addende = addende + 1
- ende = Strings.Left(ende, 10)
- ende = ende.AddDays(addende)
- Dim Column_X As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
- Column_X.HeaderText = ende
- DataGridView1.Columns.Add(Column_X)
- Dim txt As String = DataGridView1.Columns.Item(0).HeaderText
- End Sub
LG und schonmal Danke für kommenden Input,
DDD