C# 如何更改DateTime对象在DataGridView中的显示方式
我想更改DateTime对象在DataGridView中的显示方式。 具体地说,我想用秒来显示时间 c#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.
.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);
}
}
}