Format TimeSpan dans DataGridView colonne
J'ai vu ces questions mais les deux impliquent des méthodes qui ne sont pas disponibles dans la CellStyle Format de valeur. Je veux seulement montrer les heures et minutes (16:05); ne pas les secondes (16:05:13). J'ai essayé de forcer la valeur des secondes à zéro, mais quand même eu quelque chose comme 16:05:00. Bref de l'aide d'une bidouille comme fournissant une chaîne ou un DateTime (et indiquant uniquement l'heure/minutes) est-il possible que je peux obtenir la mise en forme à faire ce que je veux.
OriginalL'auteur Dan Neely | 2010-09-02
Vous devez vous connecter pour publier un commentaire.
Je viens de découvrir moi-même. Malheureusement, la solution est assez impliqués. La bonne nouvelle est qu'il fonctionne.
Tout d'abord, vous avez besoin d'un
ICustomFormatter
de mise en œuvre qui traite avecTimeSpan
valeurs. L' .NET framework ne comprend pas un tel type out-of-the-box; je suis deviner c'est parce que Microsoft n'a pas envie d'avoir à traiter avec l'ambiguïté impliqués dans la mise en forme d'unTimeSpan
(par exemple, "hh" signifie le total des heures ou seulement de l'heure composant?) et le prochain assaut de questions de soutien qui pourraient survenir lors de ces ambiguïtés confondre les développeurs.C'est OK -- mettre en œuvre votre propre. Ci-dessous est un exemple de classe, j'ai écrit qui utilise essentiellement même les chaînes de format personnalisées comme
DateTime
(ceux qui étaient applicables, de toute façon)*:Nous ne sommes pas encore fini. Avec ce type, vous êtes équipé pour attribuer une mise en forme personnalisée à la colonne dans votre
DataGridView
que vous souhaitez utiliser pour l'affichage de vosTimeSpan
valeurs.Disons que la colonne est appelée "Temps"; puis vous le faire:
Alors maintenant, vous avez mis en place, à droite?
Bien, pour une raison étrange, vous n'êtes pas encore à 100% de la façon dont il. Pourquoi la mise en forme personnalisée peut pas un coup de pied à ce point, honnêtement, je ne pourrais pas vous dire. Mais nous sommes presque fait. La dernière étape consiste à gérer la
CellFormatting
événement pour obtenir cette nouvelle fonctionnalité, nous avons écrit à réellement prendre effet:Enfin, nous avons terminé. Réglage de la
DefaultCellStyle.Format
propriété de laDataGridViewColumn
vous voulez formaté conformément à vos règles personnalisées devrait maintenant fonctionner comme prévu.*"h"/"hh" pendant des heures, "m"/"mm" pour les minutes. etc.
Fonctionne parfaitement. Un coup de cœur je vous Remercie.
Génial, Merci copain. Il fonctionne parfaitement.
Super! Avez-vous une solution pour la manipulation de l'utilisateur édite avec cette mise en forme personnalisée?
En commençant avec .NET 4 vous pouvez (et devez) utiliser @la solution de David, voir msdn.microsoft.com/en-us/library/ee372287(v=vs. 100).aspx.
OriginalL'auteur Dan Tao
Il est possible d'obtenir le même effet en utilisant simplement l'CellFormatting événement.
De toute évidence, cela n'est pas aussi complet une solution, mais assez rapide.
if( e.ColumnIndex == idx && e.Value != null && e.Value != DBNull.Value ) { e.Value = ((TimeSpan) e.Value).ToString( "ddd\\.hh\\:mm\\:ss" ); }
, ou encore mieux, par adjonction, à l'initialisation de la DataGridView:dgv.Columns[ idx ].DefaultCellStyle.Format= "ddd\\.hh\\:mm\\:ss";
OriginalL'auteur David
Essayez le code suivant
OriginalL'auteur Marco
Je ne sais pas comment faire pour définir le format de la cellule pour afficher seulement les heures et les minutes. Je vous suggère de définir le format de la cellule à la chaîne et au format de la valeur comme ceci:
OriginalL'auteur Deniplane
Utiliser le format de la chaîne de
"hh\\:mm"
.e.g
OriginalL'auteur HAN