Laden...

Aus berechneten Werten DataGrid in C# erzeugen

Erstellt von Launebaer27 vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.241 Views
L
Launebaer27 Themenstarter:in
2 Beiträge seit 2019
vor 4 Jahren
Aus berechneten Werten DataGrid in C# erzeugen

Hallo zusammen,

ich habe eine Problem bei der Entwicklung einer kleinen Anwendung.

Kurz zum Sachverhalt: Ich möchte aus zuvor ausgewählten Werten Einträge für eine DataGrid erzeugen. Diese einzelnen Einträge sollen in der ersten Spalte der Tabelle stehen.

Habe diese Funktion in Excel / VBA gebastet und da funktioniert es ohne Probleme. Bei der Übertragung nach C# leider nicht mehr.

Die Datentypen sind alle Double und die Zeile lautet:

double tme_row = Convert.ToDouble((Convert.ToDouble(val_start) + ((r - 1) / Convert.ToDouble(divval))) / 24);

Die Werte zur Berechnung lauten wie folgt: val_Start beinhaltet die Startzeit (z. B. 17 Uhr)
der Wert r = die Nummer des jeweiligen Schleifendurchlaufs (r = 1 bis 40) und divval ist der Faktor zur Einteilung in entweder 15 Minuten (divval = 4) bzw. 30 Minuten (divval = 2).

Zur Erzeugung der einzelnen Werte sitzt diese Zeile in einer For-To-Do Schleife.

Auch eine Frage bezüglich der Konvertierung: Besser DECIMAL ODER DOUBLE?

Muss ich hierbei jeden einzelne Variable konvertieren oder reicht die komplette Berechnung?

und wie kann ich den nachher darstellten Wert in das Format HH:mm konvertieren?

Habe versucht, daher auch die DIV / 24 um eine Dezimalzahl zu erhalten, welche ich zuvor in Excel einfach mittels der Funktion Zahlen formatieren als Uhrzeit dargestellt habe.

H
523 Beiträge seit 2008
vor 4 Jahren

Verwende am besten den Datentypen DateTime um die Zeitangaben zu generieren.
DateTime stellt alle Methoden zur Verfügung die Du zur Berechnung von Zeitangaben benötigst.

C
2.121 Beiträge seit 2010
vor 4 Jahren

Neben dem Typ von hypersurf der dein Problem evtl. schon löst, noch grundsätzliches zu deiner Beschreibung.

Was für Datentypen sind denn deine Variablen? Wie steht die Zeit da drin?
Wenn du von Anfang an den Variablen den passenden Typ gibst brauchst du kein Convert. Die ganzen Convert... sind grausam zu lesen, da geht die ganze Formel unter.
Welcher Typ hängt von deinen Anforderungen ab. Wenn du nur in Minuten auflöst und alle Werte in Minuten sind, reicht ein int.

Wenn du ein Beispiel gibst was du damit erreichen willst, wirds vielleicht klarer.

Ich würde die Variablen umbenennen. Statt "val" oder "tme" lieber in etwas woran man sieht dass das jetzt Stunden oder Minuten sind, oder was es eben gerade darstellt.

L
Launebaer27 Themenstarter:in
2 Beiträge seit 2019
vor 4 Jahren

in der Variable val_start steht nach der Umwandlung 17 Uhr drin bzw. 17,5 für 17:30.

die Werte für r sind vom Typ her Integer - Schleifenzähler (1-40) und in divval ebenfalls integer, da hier nur der Wert 2 oder 4 drin steht.

Ich möchte mittels der Formel und einer Schleife mir bei dem Wert 2 der Variable divval die Zeiten von z. B. 17 Uhr bis 20 Uhr zusammenbauen lassen und dabei in 30 Minuten Schritten gehen - was halt über die 2 bzw. 4 gesteuert wird - bei der 4 wären es alle 15 Minuten.

C
2.121 Beiträge seit 2010
vor 4 Jahren

Ich würde das anders machen. Hier ein Vorschlag.

Ich würde die Zeit in Minuten speichern. Das was drauf addiert werden soll ist dann 15 oder 30, daran sieht man schon wieder besser was das wird, anstatt wenn du einen Teiler angibst.
Wenn du das in Stunden umrechnen willst teilst du den Wert durch 60. Entweder als Ganzzahldivision wenn du nur die vollen Stunden brauchst, oder als double Division wenns eine Kommazahl werden soll.
Ein Schleifenzähler heißt normalerweise i. Darunter versteht man automatisch dass das in einer for-Schleife steckt.

Dann sieht deine Formel so aus


int startZeit = 60 * 8 + 30; // für 8:30 Uhr

... dann in der Schleife
zeit = startZeit + i * schrittweite;

und dann entweder
int stunden = zeit / 60;
int minuten = zeit % 60;
für zeit = 555 ergibt das stunden = 9 und minuten = 15.

oder
double stunden = zeit / 60.0;
für zeit = 555 ergibt das stunden = 9,25.

Oder du nimmst eben direkt DateTime als Datentyp, sofern du das dann im Zeitformat ausgeben oder sonst wie berechnen oder irgendwohin übergeben willst.

T
2.219 Beiträge seit 2008
vor 4 Jahren

Wenn es nur um die Zeiten geht, nimm direkt TimeSpan.
Wird von DateTime auch für die Zeit(TimeOfDay) verwendet.
Dort gibt es dann entsprechende Methode(Add*) um Sekunden, Minute und Stunden hinzuzufügen.
Alles selbst berechnen kannst du dir damit sparen, dies macht TimeSpan für dich.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.