Как изменить способ отображения объекта DateTime в DataGridView - PullRequest
8 голосов
/ 15 февраля 2010

Я хотел бы изменить способ отображения объекта DateTime в DataGridView. В частности, я хотел бы отображать секунды со временем.

C # .net 2.0

Ответы [ 5 ]

11 голосов
/ 18 февраля 2010
dataGridView1.Columns[0].DefaultCellStyle.Format = "MM/dd/yyyy HH:mm:ss";

Для конкретного форматирования, проверьте эти ссылки:

8 голосов
/ 19 февраля 2010

Вот примеры 3 разных способов:

  • строка формата на шаблоне ячейки
  • событие форматирования ячейки
  • конвертер нестандартного типа

Любое использование?

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);
        }
    }

}
1 голос
/ 15 февраля 2010

Вы можете попробовать отредактировать формат RowDefaultCellStyle-> в дизайне и выбрать приемлемый формат, или использовать это:

DataGridViewCellStyle customStyle = new DataGridViewCellStyle();
customStyle.Format = "T";
customStyle.NullValue = null;
customGridView.RowsDefaultCellStyle = customStyle;
1 голос
/ 15 февраля 2010

Переопределите событие OnRowDataBound и прочтите немного больше о культурах и форматировании в .Net

protected override void OnRowDataBound(GridViewRowEventArgs e)
{

    base.OnRowDataBound(e);


    if (e.Row.RowType == DataControlRowType.DataRow)
    {
      for (int i = 0; i < e.Row.Cells.Count; i++)
        {

                  TableCell cell = e.Row.Cells[i];
                  cell.Text = DateTime.Parse ( cell.Text, culture ); 
         }  
    }
    }
1 голос
/ 15 февраля 2010

Один из способов - обработать событие CellFormattingEvent , а затем вы можете отобразить данные так, как хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...