Zeitleiste Grafisch darstellen Vb.net

Spyke

Premium-User
hab mal versucht hier was kleines zu machen, ein bissl laut deinem Code
(ist ungetestet, und wie gesagt nur kleiner teil, musst jetzt noch bissl auf deine bedürfnisse anpassen)

Visual Basic:
                Dim zeitleisteMaxBereich As Integer = (((DateTime.Today.Year * 10000) + 12) * 100) + 31        ' 100% für die Zeitleiste, erstmal das Jahr laut Heutetag zum 31.12

                Dim bildBreite As Integer = pictureBox1.Width    ' die Breite des Zeichnungsbereiches (unsere 100% zum zeichnen)

                For Each Row As DataRow In dbdt.Rows

                    Dim Mietbegin As DateTime = CType(Row.Item("Mietbegin"), DateTime)                    ' Mietbegin als DateTime
                    Dim MietbeginNum As Integer = (((Mietbegin.Year * 10000) + Mietbegin.Month) * 100) + Mietbegin.Day    ' Mietbegin als Zahl umgerechnet
                    Dim MietbeginProzent As Integer = CInt((MietbeginNum / CDec(zeitleisteMaxBereich)))            ' der prozentuale Anteile des Mietbegins in der Zeitleiste

                    Dim Mietende As Date = CType(Row.Item("Mietende"), DateTime)                        ' Mietende als DateTime
                    Dim MietendeNum As Integer = (((Mietende.Year * 10000) + Mietende.Month) * 100) + Mietende.Day        ' Mietende als Zahl umgerechnet
                    Dim MietendeProzent As Integer = CInt((MietendeNum / CDec(zeitleisteMaxBereich)))            ' der prozentuale Anteile des Mietendes in der Zeitleiste

                    If Date.Compare(Mietende, Today) > 0 Then
 
                        Dim leftPos1 As Integer = MietbeginProzent * bildBreite ' die X-Positionen berechnen wir anhand der Breite des zeichnugnsbereiches und dem prozentualem Anteil
                        Dim leftPos2 As Integer = MietendeProzent * bildBreite

                        g.DrawLine(New Pen(System.Drawing.Color.DarkRed, 10), leftPos1, horizontal, leftPos2, horizontal)

                    End If
                    MietzeitIndex += 1          'Zähler für die reihen


                    TotalSales += Val(Row.Item("TOTAL"))            'Umsatz Berchnung

                Next

                Label15.Text = TotalSales                           'Umsatz Anzeige

und du hast was von einem Überlauffehler und falsche Eingabeformat geschrieben.
bei sowas immer die richtige/komplette Fehlermeldugn/Exception angeben,
ansonsten kann man so erstmal nixs mit dieser Aussage anfangen.
 
Zuletzt bearbeitet:

Spyke

Premium-User
hab gerade gemerkt die prozentualle Berechnung mit zeitleisteMaxBereich, passt nicht ganz weil die Werte zu groß sind. Bewegt sich alles im 99% bereich.
mir fehlt jetzt nur die zeit da weiter zu schauen
 

Spyke

Premium-User
problem mit der zeitleisteMaxBereich war das ich das für das DrawLine hin hinbauen wollt.
wenn stattdessen mit DrawRectangle (oder FillRectangle) gearbeitet wird, könnte es so gehen

(Problem war die 2te X Position im DrawLine, beim Draw- oder FillRectangle kann man schön mit Breitenangabe arbeiten)

Visual Basic:
                Dim zeitleisteBeginn As Integer = (((DateTime.Today.Year * 10000) + 01) * 100) + 01        ' Beginn der Zeitleiste, erstmal das Jahr laut Heutetag zum 01.01
                Dim zeitleisteEnde As Integer = (((DateTime.Today.Year * 10000) + 12) * 100) + 31        ' Ende Zeitleiste, erstmal das Jahr laut Heutetag zum 31.12
                ' hier eventuell dann per SQL das niedrigste und höchste Mietbeginn/Mietende ermittln anstatt hart auf den 01.01 und 31.12 zu gehen

                Dim zeitleisteMaxBereich As Integer = zeitleisteEnde - zeitleisteBeginn + 1       ' 100% für die Zeitleiste

                Dim bildBreite As Integer = pictureBox1.Width    ' die Breite des Zeichnungsbereiches (unsere 100% zum zeichnen)

                For Each Row As DataRow In dbdt.Rows

                    Dim Mietbegin As DateTime = CType(Row.Item("Mietbegin"), DateTime)                    ' Mietbegin als DateTime
                    Dim MietbeginNum As Integer = (((Mietbegin.Year * 10000) + Mietbegin.Month) * 100) + Mietbegin.Day    ' Mietbegin als Zahl umgerechnet
                    Dim MietbeginProzent As Integer = CInt(((MietbeginNum - zeitleisteBeginn) / CDec(zeitleisteMaxBereich)))            ' der prozentuale Anteile des Mietbegins in der Zeitleiste

                    Dim Mietende As Date = CType(Row.Item("Mietende"), DateTime)                        ' Mietende als DateTime
                    Dim MietendeNum As Integer = (((Mietende.Year * 10000) + Mietende.Month) * 100) + Mietende.Day        ' Mietende als Zahl umgerechnet
                    Dim MietendeProzent As Integer = CInt(((MietendeNum - zeitleisteBeginn) / CDec(zeitleisteMaxBereich)))            ' der prozentuale Anteile des Mietendes in der Zeitleiste

                    If Date.Compare(Mietende, Today) > 0 Then
 
                        Dim leftPos As Integer = MietbeginProzent * bildBreite
                        Dim widthPos As Integer = (MietendeProzent * bildBreite) - leftPos

                        g.DrawRectangle(New Pen(System.Drawing.Color.DarkRed, 10), leftPos, horizontal, widthPos, horizontal + 10)

                    End If
                    MietzeitIndex += 1          'Zähler für die reihen


                    TotalSales += Val(Row.Item("TOTAL"))            'Umsatz Berchnung

                Next

                Label15.Text = TotalSales

neu ist die Ermittung des zeitleisteMaxBereich, MietbeginProzent, MietendeProzent und für das zeichnen leftPos, widthPos und das DrawRectangle

Nachtrag:
seh grad um das DrawLine Problem zu lösen könnte man dann einfach doch so machen
(in Verbindung mit dem was ich jetzt für DrawRectangle gemacht hatte)
Visual Basic:
                        Dim leftPos1 As Integer = MietbeginProzent * bildBreite
                        Dim leftPos2 As Integer = (MietendeProzent * bildBreite)

                        g.DrawLine(New Pen(System.Drawing.Color.DarkRed, 10), leftPos1, horizontal, leftPos2, horizontal)
 
Zuletzt bearbeitet:

werner_sg

Erfahrenes Mitglied
hab mal versucht hier was kleines zu machen, ein bissl laut deinem Code
(ist ungetestet, und wie gesagt nur kleiner teil, musst jetzt noch bissl auf deine bedürfnisse anpassen)

Visual Basic:
                Dim zeitleisteMaxBereich As Integer = (((DateTime.Today.Year * 10000) + 12) * 100) + 31        ' 100% für die Zeitleiste, erstmal das Jahr laut Heutetag zum 31.12

                Dim bildBreite As Integer = pictureBox1.Width    ' die Breite des Zeichnungsbereiches (unsere 100% zum zeichnen)

                For Each Row As DataRow In dbdt.Rows

                    Dim Mietbegin As DateTime = CType(Row.Item("Mietbegin"), DateTime)                    ' Mietbegin als DateTime
                    Dim MietbeginNum As Integer = (((Mietbegin.Year * 10000) + Mietbegin.Month) * 100) + Mietbegin.Day    ' Mietbegin als Zahl umgerechnet
                    Dim MietbeginProzent As Integer = CInt((MietbeginNum / CDec(zeitleisteMaxBereich)))            ' der prozentuale Anteile des Mietbegins in der Zeitleiste

                    Dim Mietende As Date = CType(Row.Item("Mietende"), DateTime)                        ' Mietende als DateTime
                    Dim MietendeNum As Integer = (((Mietende.Year * 10000) + Mietende.Month) * 100) + Mietende.Day        ' Mietende als Zahl umgerechnet
                    Dim MietendeProzent As Integer = CInt((MietendeNum / CDec(zeitleisteMaxBereich)))            ' der prozentuale Anteile des Mietendes in der Zeitleiste

                    If Date.Compare(Mietende, Today) > 0 Then
 
                        Dim leftPos1 As Integer = MietbeginProzent * bildBreite ' die X-Positionen berechnen wir anhand der Breite des zeichnugnsbereiches und dem prozentualem Anteil
                        Dim leftPos2 As Integer = MietendeProzent * bildBreite

                        g.DrawLine(New Pen(System.Drawing.Color.DarkRed, 10), leftPos1, horizontal, leftPos2, horizontal)

                    End If
                    MietzeitIndex += 1          'Zähler für die reihen


                    TotalSales += Val(Row.Item("TOTAL"))            'Umsatz Berchnung

                Next

                Label15.Text = TotalSales                           'Umsatz Anzeige

und du hast was von einem Überlauffehler und falsche Eingabeformat geschrieben.
bei sowas immer die richtige/komplette Fehlermeldugn/Exception angeben,
ansonsten kann man so erstmal nixs mit dieser Aussage anfangen.
habs gerade mal getestet, kommen zwar keine fehler meldung aber auch die PictureBox bleibt leer
und du hast was von einem Überlauffehler und falsche Eingabeformat geschrieben.
bei sowas immer die richtige/komplette Fehlermeldugn/Exception angeben,
ansonsten kann man so erstmal nixs mit dieser Aussage anfangen.

Ja konnte damit auch nichts Anfangen nicht mal ein Ansatz zum Googeln, aber ist das einzige was ich zur Laufzeit als Fehler bekommen habe, Haltepunkte im Script haben auch nichts gebracht. Entweder ist es bis zum Fehler durchgelaufen oder eine zeile Vorher ist der Teil mit dem Fehler die DrawZeile noch nicht ausgeführt.
Somit wurde nur der Fehler zur Laufzeit angezeigt alles andere wurde nicht bemängelt oder mit Hinweis versehen.
 

Spyke

Premium-User
Immer exception komplett posten.
Und hast du meine folge post beachtet, im ersten entwurf hatte ich noch das problem mit dem zeitleisteMax
 

Spyke

Premium-User
Ach und seh grad, mietbeginProzent und mietendeProzent dürfen nicht integer sein, stell die mal auf decimal und nimm das CInt drum rum weg.
Bei der prozentberechnung kommen werte von 0,XX raus, wir brauchen die nachkommastellen, die gehen uns durch die ganzzahl verloren.

(Sitze grad mit handy am see weshalb ichs schlecht ausbessern kann)
 

werner_sg

Erfahrenes Mitglied
Ach und seh grad, mietbeginProzent und mietendeProzent dürfen nicht integer sein, stell die mal auf decimal und nimm das CInt drum rum weg.
Bei der prozentberechnung kommen werte von 0,XX raus, wir brauchen die nachkommastellen, die gehen uns durch die ganzzahl verloren.

(Sitze grad mit handy am see weshalb ichs schlecht ausbessern kann)
schau ich mir nachher mal an ist im Augenblick zu Heiß um am tag zu arbeiten ;-)
 

werner_sg

Erfahrenes Mitglied
Immer exception komplett posten.
War diesmal sehr Wortkarg, da gabs nicht viel mehr
Und hast du meine folge post beachtet, im ersten entwurf hatte ich noch das problem mit dem zeitleisteMax
Ja und am Ende war ich etwas frustiert, da ich es so auch schon mehrfach hatte.
Aber die deklaration dazu immer Außerhalb des eachRow Block

So er zeigt jetzt auf jeden Fall schon mal einen Balken an, werde dann heute mal schauen das ich die Linien wieder einbaue und die Fahrzeug Nummer sowie die Zeiten
 

werner_sg

Erfahrenes Mitglied
Ach und seh grad, mietbeginProzent und mietendeProzent dürfen nicht integer sein, stell die mal auf decimal und nimm das CInt drum rum weg.
Bei der prozentberechnung kommen werte von 0,XX raus, wir brauchen die nachkommastellen, die gehen uns durch die ganzzahl verloren.

(Sitze grad mit handy am see weshalb ichs schlecht ausbessern kann)
mietendeProzent dürfen nicht integer
genau dort fing mein Probem beim Umwandeln an, wobei mein größter Fehler daran lag das ich alles oberhalb des eachRow Block umwandeln wollte, damit ich es auch im letzten Bock der ja eigentlich gar nicht gebraucht wird und dementsprechend nicht mehr vorhanden ist nutzen konnte.

Habs jetzt Dank deiner Hilfe Verstanden und soweit das jetzt schon mal alle Termine auf einer Linie angezeigt werden.
Auf dem Bild überlagern sich am Anfang Fahrzeug Nr. 1 vom 31.7 bis zum 20.8 und Fahrzeug Nr. 3 vom 31.7 bis 22.8, da das Fahrzeug Nr. 3 am 22.8 wieder startet wirkt es wie ein Balken.

Stellt sich also noch die Frage wie ich das jetzt nach Fahrzeugen auf unterschiedliche Linien bekomme, dann ist es perfekt.
1627846533780.png
 

Spyke

Premium-User
Du musst dafür die Y-Position beim DrawLine entsprechend anpassen (deine Variable horizontal)
(hatte ich in meinen Beispielen jetzt nicht gemacht)

z.B. wie du es glaube schon an einer stelle hattest
in der for each Schleife
horizontal = horizontal + 10

ev. alternativ je fahrzeug könntest du probieren wenn du die fahrzeugnummer zur Berechnung der Y-Position nimmst
horizontal = fahrzeugNummer * 10
 

Neue Beiträge