myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns
» Datenschutzerklärung
» Impressum

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » Aus berechneten Werten DataGrid in C# erzeugen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Aus berechneten Werten DataGrid in C# erzeugen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Launebaer27 Launebaer27 ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.05.2019
Beiträge: 2
Herkunft: NRW


Launebaer27 ist offline

Aus berechneten Werten DataGrid in C# erzeugen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

Zitat:
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.
16.05.2019 18:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
hypersurf hypersurf ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.10.2008
Beiträge: 450
Entwicklungsumgebung: VS Pro 2017, Android Studio 3
Herkunft: Münster


hypersurf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
17.05.2019 13:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 1.996


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
17.05.2019 13:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Launebaer27 Launebaer27 ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.05.2019
Beiträge: 2
Herkunft: NRW

Themenstarter Thema begonnen von Launebaer27

Launebaer27 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
17.05.2019 23:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 1.996


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

Code:
1:
2:
3:
4:
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.
18.05.2019 07:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.198
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
18.05.2019 09:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 22.05.2019 04:40