Format Zeit in DataGridView-Spalte
Ich habe gesehen, diese Fragen aber beide beinhalten die Methoden, die nicht verfügbar sind in der CellStyle-Format Wert. Ich möchte nur zeigen die Stunden und Minuten portion (16:05); nicht die Sekunden als gut (16:05:13). Ich habe versucht, zwingen die Sekunden Wert auf null, sondern immer noch so etwas wie 16:05:00 Uhr. Kurz, mit ein Schlamassel wie um eine Zeichenfolge oder ein DateTime (und zeigt nur die Stunden/Minuten-Teil) gibt es eine Möglichkeit, ich kann mit der Formatierung zu tun, was ich will.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gerade entdeckt diese selbst. Leider, die Lösung ist ziemlich beteiligt. Die gute Nachricht ist, dass es funktioniert.
Erstens, Sie müssen eine
ICustomFormatter
Umsetzung, die sich mitTimeSpan
Werte. Die .NET framework nicht enthalten diese Art von out-of-the-box; ich bin raten das ist, weil Microsoft nicht wollen, zu tun haben mit der Zweideutigkeit beteiligt formatierenTimeSpan
(z.B. bedeutet "hh" bedeutet Gesamtzahl der Stunden, oder nur die Stunden-Komponente?) und der anschließende Ansturm der Unterstützung für Probleme, die entstehen würden, wenn diese Unklarheiten verwirrt Entwickler.Ist das OK-nur der Umsetzung Ihrer eigenen. Unten ist ein Beispiel der Klasse habe ich geschrieben, dass verwendet im Grunde die gleichen benutzerdefinierten format-strings wie
DateTime
(diejenigen, die anwendbar waren, sowieso)*:Wir sind noch nicht fertig. Mit dieser Art eingerichtet, Sie sind ausgestattet, um zuweisen eines benutzerdefinierten Formatierer zu der Spalte in der
DataGridView
, die Sie verwenden möchten für die Anzeige IhrerTimeSpan
Werte.Sagen wir mal, die Spalte "Zeit"; dann würden Sie dies tun:
So, jetzt Sie ' re einrichten, richtig?
Gut, für einige ungerade Grund, du bist immer noch nicht 100% Weg gibt. Warum benutzerdefinierte Formatierung kann nicht kicken in an dieser Stelle, ganz ehrlich, ich konnte es dir nicht sagen. Aber wir sind fast getan. Das ein letzter Schritt ist die Auswertung der
CellFormatting
Veranstaltung, um sich auf diese neue Funktionalität, die wir geschrieben haben, um tatsächlich wirksam werden:Endlich, wir sind fertig. Einstellung der
DefaultCellStyle.Format
Eigenschaft desDataGridViewColumn
Sie formatiert werden soll nach Ihren benutzerdefinierten Regeln sollte nun wie erwartet funktionieren.*Also, "h"/"hh" für Stunden, "m"/"mm" für die Minuten. etc.
Ist es möglich, um den Effekt zu erzielen gleiche, indem er einfach nur das CellFormatting-Ereignis.
Dies ist natürlich nicht als eine umfassende Lösung, aber ganz schnell.
if( e.ColumnIndex == idx && e.Value != null && e.Value != DBNull.Value ) { e.Value = ((TimeSpan) e.Value).ToString( "ddd\\.hh\\:mm\\:ss" ); }
oder noch besser, indem Sie die folgende, um die Initialisierung des DataGridView:dgv.Columns[ idx ].DefaultCellStyle.Format= "ddd\\.hh\\:mm\\:ss";
Versuchen Sie den folgenden code
Ich weiß nicht, wie das format der Zelle zeigen nur Stunden und Minuten. Ich würde vorschlagen, Sie legen Sie das format der Zelle, die die Zeichenfolge und format der Wert wie diese:
Verwenden format string
"hh\\:mm"
.e.g