数据绑定DateTime到label->文本将值转换为本地时间

时间:2012-06-24 16:15:20

标签: datetime data-binding utc localtime

我在C ++ .net工作。我有一个自定义控件,显示dataBase的内容,其中包含一个bindingsource。我在控件中使用标签通过带有以下代码的bindingsource将text属性绑定到数据集中的数据:

mycontrol->Controls[i]->DataBindings->Add((gcnew System::Windows::Forms::Binding(L"Text", 
this->bindingSourceRelRev_Data, mycolumn,true, System::Windows::Forms::DataSourceUpdateMode::OnValidation,
nullptr, L"t")));

请注意,代码是一个循环的摘录,迭代所有控件,因此控件[i],它将是标签控件,变量mycolumn,它将是数据集的列被绑定到。除了我还没有找到改变方法的不需要的行为之外,它的工作正常。 软件在世界不同地区运行,但记录必须在当地时间。数据库将本地时间的时间存储为DateTime值,但dataBinding将其解释为UTC,并在应用了时区差异的标签中显示时间。例如,如果数据是24/06/2012 16:40,它将在4小时差异时区显示24/06/2012 22:40。 我需要它来显示存储的值,而不需要更改。

我可以想到不同的方式,但非优雅: - 捕获标签的文本更新事件并取消更改... - 将日期存储为DB中的String ... - 手动填写标签...... -...

如果我在没有格式化的情况下绑定,它将不会更改值,但是我在标签上有原始日期时间字符串...

拜托,我在装订中遗失的任何魔法,以便它不会认为它必须改变时区吗?

非常感谢您提前! 亚当

1 个答案:

答案 0 :(得分:0)

好吧,似乎问题实际上不在绑定上,而是在数据集本身。列的属性DateTimeMode设置为undefinedlocal,这是序列化dataimput并将其转换为查看数据的机器的本地时间。刚刚将属性更改为undefined,它现在可以正常工作,只需从未修改的数据中获取日期。

我对DateTime格式提供程序的文档感到困惑,该文档声明它序列化了日期。也许我误解了它......实际上并没有。

非常感谢你!