J'ai vu ces Questions Mais tous deux impliquent des méthodes qui ne sont pas disponibles dans la valeur du format Cellstyle. Je veux seulement montrer les heures et les minutes (16:05); Pas les secondes aussi (16:05:13). J'ai essayé de forcer la valeur des secondes à zéro mais j'ai toujours quelque chose comme 16:05:00. À court d'utilisation d'un kludge comme la fourniture d'une chaîne ou d'une date d'heure (et ne montrant que l'heure / la partie) est-ce que je peux obtenir le formatage pour faire ce que je veux. P>
6 Réponses :
Je ne sais pas comment définir le format de la cellule pour afficher uniquement des heures et des minutes. Je vous suggère de définir le format de la cellule sur la chaîne et de formater la valeur comme celle-ci:
String.Format("{0:D2}:{1:D2}", DateTime.Now.TimeOfDay.Hours, DateTime.Now.TimeOfDay.Minutes);
Je viens de découvrir cela moi-même. Malheureusement, la solution est assez impliquée. La bonne nouvelle est que cela fonctionne.
Tout d'abord, vous avez besoin d'un Ça va - il suffit de mettre en œuvre le vôtre. Vous trouverez ci-dessous un exemple de classe que j'ai écrit qui utilise fondamentalement Les mêmes chaînes de format personnalisées que Nous ne sommes pas encore terminés. Avec ce type en place, vous êtes équipé pour affecter un formateur personnalisé à la colonne de votre alors maintenant vous êtes mis en place, non? p> Eh bien, pour une raison quelconque, vous n'êtes toujours pas 100% du chemin là-bas. Pourquoi le formatage personnalisé ne peut pas lancer à ce stade, je ne pouvais honnêtement pas vous dire. Mais nous sommes presque em> faites. La seule étape consiste à gérer l'événement code> CellFormatting CoD> pour obtenir cette nouvelle fonctionnalité que nous avons écrite pour prendre effet: p> enfin, nous 're terminé. Définition du * donc, "H" / "HH" pendant des heures, "M" / "MM" pendant des minutes. c. sub> p> p> iCustomformatter code> implémentation qui concerne les valeurs
Timespan code>. Le .NET Framework n'inclut pas un tel type de type de type; Je suis devinant em> c'est parce que Microsoft ne voulait pas avoir à gérer l'ambiguïté impliquée dans la mise en forme d'un Timespan code> (par exemple, "HH" signifie "HH" ou uniquement le Composant d'heure?) Et l'affranchissement des problèmes de soutien qui se poserait lorsque ces ambiguïtés ont confondu les développeurs. P>
DateTime code>
(ceux qui étaient applicables, de toute façon) *: p> DataGridView CODE> que vous souhaitez utiliser pour afficher les valeurs code> Timespan p> < P> Disons que la colonne s'appelle "temps"; alors vous feriez cela: p>
defaultCellstyle.format Code> Propriété du
DataGridViewColumn Code> Vous voulez que le formaté en fonction de vos règles personnalisées devrait maintenant fonctionner comme prévu. P>
Vous pourriez avoir raison de savoir pourquoi ce n'est pas dans le cadre. C'est beaucoup plus impliqué que je pensais que cela aurait été, merci.
Fonctionne parfaitement. Un cœur sentit merci.
Super! Avez-vous une solution pour gérer les modifications utilisateur avec ce formateur personnalisé?
En commençant par .NET 4, vous pouvez utiliser (et devrait) utiliser la solution @ David, voir msdn.microsoft.com/en-us/library/ee372287 (v = vs.100) .aspx .
Il est possible d'obtenir l'effet identique en utilisant simplement l'événement CellFormatting.
private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (e.Value != null && e.Value != DBNull.Value) e.Value = ((TimeSpan)e.Value).Hours.ToString("00") + ":" + ((TimeSpan)e.Value).Minutes.ToString("00"); }
Commençant par .NET 4 Ceci pourrait être simplifié pour formater directement: si (e.columnindex == iDx && e.value! = Null && e.value! = Dbnull.value) {E.Value = ((Timespan) e.value) .tostring ("DDD \\. HH \\: mm \\: ss"); } code>, ou même mieux, en ajoutant ce qui suit à l'initialisation de la DataGridView:
dgv.columns [IDX] .defaultcellstyle.format = "ddd \\. HH \\: mm \\: ss" ; code>
Essayez le code suivant
dataGridView1.Columns["columnName"].DefaultCellStyle.Format = "hh\\:mm";
Utiliser la chaîne de format "HH \\: mm" code>.
E.g
Vérifiez toujours votre formatage avant de poster pour vous assurer que le point entier n'était pas perdu à un malentendu de Markdown.
Essayez une autre approche. Il suffit d'ajouter à votre classe de liaison aux propriétés DataGridView comme par exemple Disons que vous avez une classe qui l'a ... P> DatePacketattimedelaySTR code>.
public DateTime? LastPacketAtTime { get; set; }
public TimeSpan? LastPacketAtTimeDelay
{
get
{
if (LastPacketAtTime.HasValue)
{
var ts = DateTime.Now - LastPacketAtTime.Value;
return ts;
}
return null;
}
}
public string LastPacketAtTimeDelayAsStr
{
get
{
if (LastPacketAtTimeDelay.HasValue)
{
var hours = LastPacketAtTimeDelay.Value.Hours.ToString("00");
var minutes = LastPacketAtTimeDelay.Value.Minutes.ToString("00");
var seconds = LastPacketAtTimeDelay.Value.Seconds.ToString("00");
return $"{LastPacketAtTimeDelay.Value.Days} days {hours}:{minutes}:{seconds}";
}
return null;
}
}