C# 如何更改DateTime对象在DataGridView中的显示方式

C# 如何更改DateTime对象在DataGridView中的显示方式,c#,.net,winforms,C#,.net,Winforms,我想更改DateTime对象在DataGridView中的显示方式。 具体地说,我想用秒来显示时间 c# .net 2.0一种方法是处理,然后您可以按自己的方式显示数据。您可以尝试在design中编辑RowDefaultCellStyle->format并选择可接受的格式,或者使用以下方法: DataGridViewCellStyle customStyle = new DataGridViewCellStyle(); customStyle.Format = "T"; customStyle.

我想更改DateTime对象在DataGridView中的显示方式。 具体地说,我想用秒来显示时间

c#
.net 2.0

一种方法是处理,然后您可以按自己的方式显示数据。

您可以尝试在design中编辑RowDefaultCellStyle->format并选择可接受的格式,或者使用以下方法:

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

重写OnRowDataBound事件并阅读更多关于

受保护的重写无效OnRowDataBound(GridViewRowEventArgs e)
{
base.OnRowDataBound(e);
如果(e.Row.RowType==DataControlRowType.DataRow)
{
for(int i=0;i
有关特定格式,请查看以下链接:


    • 以下是三种不同方式的示例:

      • 单元格模板上的格式字符串
      • 单元格格式化事件
      • 自定义类型转换器
      有用吗

      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);
              }
          }
      
      }
      
      使用系统;
      使用系统组件模型;
      使用System.Windows.Forms;
      公共类MyData
      {
      公共日期时间A{get;set;}
      公共日期时间B{get;set;}
      公共日期时间C{get;set;}
      [TypeConverter(typeof(CustomDateTimeConverter))]
      公共日期时间D{get;set;}
      }
      类CustomDateTimeConverter:DateTimeConverter
      {
      公共重写对象转换为(ITypeDescriptorContext上下文,System.Globalization.CultureInfo区域性,对象值,类型destinationType)
      {
      if(destinationType==typeof(string))
      {
      返回((日期时间)值).ToString(“dd-MM-yyy-HH:MM:ss”);
      }
      返回base.ConvertTo(上下文、区域性、值、destinationType);
      }
      }
      静态类程序{
      [状态线程]
      静态void Main()
      {
      DateTime when=DateTime.Now;
      var data=新绑定列表
      {
      新MyData{A=when,B=when,C=when}
      };
      使用(var form=new form())
      使用(var grid=newdatagridview){
      AutoGenerateColumns=false,
      DataSource=data,Dock=DockStyle.Fill})
      {
      表单.控件.添加(网格);
      grid.Columns.Add(
      新DataGridViewTextBoxColumn{
      HeaderText=“香草”,
      AutoSizeMode=DataGridViewAutoSizeColumnMode.AllCells,
      DataPropertyName=“A”,
      });
      grid.Columns.Add(
      新DataGridViewTextBoxColumn{
      HeaderText=“格式”,
      AutoSizeMode=DataGridViewAutoSizeColumnMode.AllCells,
      DataPropertyName=“B”,
      DefaultCellStyle={Format=“dd/MM/yyyy HH:MM:ss”}
      });
      grid.Columns.Add(
      新DataGridViewTextBoxColumn{
      HeaderText=“CellFormatting”,
      AutoSizeMode=DataGridViewAutoSizeColumnMode.AllCells,
      DataPropertyName=“C”,
      });
      grid.CellFormatting+=(发送方,参数)=>
      {
      如果(args.Value!=null&&args.ColumnIndex==2
      &&args.DesiredType==类型(字符串))
      {
      args.Value=((DateTime)args.Value).ToString(“dd-MM-yyy-HH:MM:ss”);
      }
      };
      grid.Columns.Add(
      新DataGridViewTextBoxColumn{
      HeaderText=“类型转换器”,
      AutoSizeMode=DataGridViewAutoSizeColumnMode.AllCells,
      DataPropertyName=“D”,
      });
      申请表格;
      }
      }
      }
      
      如果您不需要任何特殊情况来完全显示其他内容,这是设置日期时间格式的正确方法。@Justin:我不知道您在说什么。你能给我更多的信息吗?我们公司有这样的情况,如果DateTime是一个特定的值,它需要显示为一个空字符串。要做到这一点,您可以使用DataGridView+1上的CellFormatting事件来获得最完整的答案,选择最简单的解决方案来满足您的需要。这个答案让我将这个问题标记为最喜欢的۞
      dataGridView1.Columns[0].DefaultCellStyle.Format = "MM/dd/yyyy HH:mm:ss";
      
      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);
              }
          }
      
      }