2013-08-17 52 views
0

我可是从数据库2日期字段获得字符串格式,如:C#日期字段数据绑定值到字符串

“YYYY.MM.DD”

然后,在我的形式,我想数据绑定添加到2个DatePickers,将显示这些日期如下图所示:

dtStart.DataBindings.Add(new Binding("Value", _ds.Tables["invoice"], "startdate")); 
dtEnd.DataBindings.Add(new Binding("Value", _ds.Tables["invoice"], "enddate")); 

现在的问题是,当我改变来自DatePicker的日期则该值将是一个日期和我需要的是更新的价值,但在相同的字符串格式“yyy y.mm.dd”。

任何线索我该如何强制这样做?

非常感谢

+0

'DateTime'没有任何所谓的'格式string'。如果你想显示一个'DateTime',你必须将它转换为某种格式的字符串(例如'yyyy.mm.dd') –

+0

Datepickers中显示的日期正确,我需要的是相反的,当我更改日期选择器显然数据表格单元格值将更新为DateTime而不是格式化的字符串。 – VAAA

+0

DateTimePicker的'Value'是'DateTime',那么为什么'formatted string'可以更新回你的'DataTable'?您应该检查'DataGridViewColumn.DefaultCellStyle.Format' –

回答

1

如果您的DataGridViewColumn startdatestring类型。您可以更新回数据源之前,一个BindingParse事件处理程序添加代码格式化值:

Binding bind = new Binding("Value", _ds.Tables["invoice"], "startdate"); 
bind.Parse += (s,e) => { 
    e.Value = ((DateTime)e.Value).ToString("yyyy.mm.dd"); 
}; 
dtStart.DataBindings.Add(bind); 
//Do the same for dtEnd 

不过,我建议设置你的DataGridViewColumn data typeDateTime。然后,你将不再需要任何自定义Parsing和刚刚成立的格式进行像这样的列的单元格:

dataGridView1.Columns["startdate"].DefaultCellStyle.Format = "yyyy.mm.dd"; 
+0

让我试试看吧!像这样的声音是解决方案:)谢谢 – VAAA

+0

是的,它工作的很好!我很久以前就试图找到解决方案。欣赏它 – VAAA