TimeSpan in der DataGridView-Spalte formatieren

7

Ich habe diese Fragen , aber beide beinhalten Methoden, die nicht im CellStyle Format-Wert verfügbar sind. Ich möchte nur die Stunden und Minuten zeigen (16:05); nicht die Sekunden (16:05:13). Ich habe versucht, den Sekundenwert auf Null zu bringen, aber immer noch etwas wie 16:05:00. Es gibt keine Möglichkeit, die Formatierung so zu gestalten, wie ich möchte. Kurz gesagt, ich benutze keine Kludis, die eine Zeichenfolge oder eine DateTime bereitstellen (und nur den Stunden- / Minuten-Teil anzeigen).

    
Dan Neely 02.09.2010, 14:09
quelle

5 Antworten

11

Ich habe das gerade selbst entdeckt. Leider ist die Lösung ziemlich kompliziert. Die gute Nachricht ist, dass es funktioniert.

Zunächst benötigen Sie eine ICustomFormatter Implementierung, die mit TimeSpan Werten arbeitet. Das .NET-Framework enthält einen solchen nicht standardmäßigen Typ. Ich rate liegt daran, dass Microsoft nicht mit der Mehrdeutigkeit bei der Formatierung von TimeSpan umgehen wollte (zB bedeutet "hh" die Gesamtstundenzahl oder nur die Stundenkomponente?) Und der daraus resultierende Ansturm von Unterstützungsproblemen, die entstehen würden, wenn diese Unklarheiten die Entwickler verwirren würden.

Das ist in Ordnung - implementieren Sie einfach Ihre eigenen. Unten ist eine Beispielklasse, die ich schrieb, die im Grunde die gleichen benutzerdefinierten Formatzeichenfolgen wie DateTime verwendet ( diejenigen, die überhaupt anwendbar waren) *:

%Vor%

Wir sind noch nicht fertig. Mit diesem Typ können Sie der Spalte in DataGridView einen benutzerdefinierten Formatierer zuweisen, den Sie für die Anzeige Ihrer TimeSpan -Werte verwenden möchten.

Nehmen wir an, diese Spalte heißt "Time"; dann würdest du das tun:

%Vor%

Also jetzt sind Sie eingerichtet, oder?

Nun, aus irgendeinem seltsamen Grund bist du immer noch nicht zu 100% da. Warum benutzerdefinierte Formatierung zu diesem Zeitpunkt nicht eingreifen kann, konnte ich ehrlich gesagt nicht sagen. Aber wir sind fast fertig. Der letzte Schritt besteht darin, das Ereignis CellFormatting zu behandeln, damit diese neue Funktionalität, die wir geschrieben haben, wirksam wird:

%Vor%

Endlich sind wir fertig. Das Festlegen der DefaultCellStyle.Format -Eigenschaft von DataGridViewColumn , die gemäß Ihren benutzerdefinierten Regeln formatiert werden soll, sollte nun wie erwartet funktionieren.

* Also, "h" / "hh" für Stunden, "m" / "mm" für Minuten. usw.

    
Dan Tao 02.09.2010, 16:28
quelle
9

Es ist möglich, denselben Effekt zu erzielen, indem Sie einfach das CellFormatting-Ereignis verwenden.

%Vor%

Das ist offensichtlich keine so umfassende Lösung, aber ziemlich schnell.

    
David 15.11.2012 20:59
quelle
4

Probieren Sie den folgenden Code

aus %Vor%     
thinco 19.02.2015 16:02
quelle
2

Ich weiß nicht, wie man das Format der Zelle so einstellt, dass es nur Stunden und Minuten anzeigt. Ich würde vorschlagen, dass Sie das Format der Zelle als String festlegen und den Wert folgendermaßen formatieren:

%Vor%     
Deniplane 02.09.2010 15:08
quelle
0

Verwenden Sie die Formatzeichenfolge "hh\:mm" . z. B.

%Vor%     
HAN 09.08.2017 07:30
quelle