8
votes

Comment changer la façon dont un objet DateTime est affiché dans un fichier DataGridView

Je voudrais changer la façon dont un objet DateTime est affiché dans un fichier DataGridView. Plus précisément, je voudrais avoir des secondes affichées avec l'heure.

c # .NET 2.0


0 commentaires

5 Réponses :


1
votes

Un moyen consiste à gérer le CellformattingEvent événement et ensuite vous pouvez afficher les données comment vous voulez.


0 commentaires

1
votes

Vous pouvez essayer d'éditer RowdefaultCellstyle-> Format dans la conception et choisissez Format acceptable, ou utilisez ceci:

DataGridViewCellStyle customStyle = new DataGridViewCellStyle();
customStyle.Format = "T";
customStyle.NullValue = null;
customGridView.RowsDefaultCellStyle = customStyle;


0 commentaires

1
votes

remplacer l'événement OnRowDatabound et lisez un peu plus sur Cultures et formatage de .net < / a> xxx


0 commentaires

11
votes
dataGridView1.Columns[0].DefaultCellStyle.Format = "MM/dd/yyyy HH:mm:ss";
For specific formatting, check out these links:
Standard Date and Time Format Strings
Custom Date and Time Format Strings

3 commentaires

C'est la bonne façon de formater une date d'heure si vous n'avez pas besoin de cas particuliers pour afficher quelque chose d'autre entièrement.


@Justin: Je ne suis pas sûr de ce que vous dites. Pouvez-vous me donner plus d'informations?


Notre société a le cas où si DateTime est une certaine valeur, il doit être affiché comme une chaîne vide. Pour ce faire, vous utiliseriez l'événement CellFormatting sur la DataGridView



8
votes

Voici des exemples de 3 manières différentes:

  • Chaîne de format sur le modèle de cellule LI>
  • Evénement de formatage cellulaire LI>
  • Convertisseur de type personnalisé Li> ul>

    Toute utilisation? P>

    using System;
    using System.ComponentModel;
    using System.Windows.Forms;
    public class MyData
    {
        public DateTime A { get; set; }
        public DateTime B { get; set; }
        public DateTime C { get; set; }
        [TypeConverter(typeof(CustomDateTimeConverter))]
        public DateTime D { get; set; }
    }
    class CustomDateTimeConverter : DateTimeConverter
    {
        public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
        {
            if (destinationType == typeof(string))
            {
                return ((DateTime)value).ToString("dd-MM-yyyy HH:mm:ss");
            }
            return base.ConvertTo(context, culture, value, destinationType);
        }
    }
    static class Program {
        [STAThread]
        static void Main()
        {
            DateTime when = DateTime.Now;
            var data = new BindingList<MyData>
            {
                new MyData { A = when, B = when, C = when }
            };
            using (var form = new Form())
            using (var grid = new DataGridView {
                AutoGenerateColumns = false,
                DataSource = data, Dock = DockStyle.Fill })
            {
                form.Controls.Add(grid);
                grid.Columns.Add(
                    new DataGridViewTextBoxColumn {
                        HeaderText = "Vanilla",
                        AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells,
                        DataPropertyName = "A",
                    });
                grid.Columns.Add(
                    new DataGridViewTextBoxColumn {
                        HeaderText = "Format",
                        AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells,
                        DataPropertyName = "B",
                        DefaultCellStyle = { Format = "dd/MM/yyyy HH:mm:ss" }
                    });
                grid.Columns.Add(
                    new DataGridViewTextBoxColumn {
                        HeaderText = "CellFormatting",
                        AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells,
                        DataPropertyName = "C",
                    });
                grid.CellFormatting += (sender, args) =>
                {
                    if (args.Value != null && args.ColumnIndex == 2
                        && args.DesiredType == typeof(string))
                    {
                        args.Value = ((DateTime)args.Value).ToString("dd MM yyyy HH:mm:ss");
                    }
                };
                grid.Columns.Add(
                    new DataGridViewTextBoxColumn {
                        HeaderText = "TypeConverter",
                        AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells,
                        DataPropertyName = "D",
                    });
                Application.Run(form);
            }
        }
    
    }
    


2 commentaires

+1 Pour la réponse la plus complète, choisissez la solution la plus simple qui correspond à vos besoins.


Cette réponse m'a fait marquer la question comme favori