0

我在 C++ .net 中工作。我有一个自定义控件,它显示一个数据库的内容,中间有一个绑定源。我使用控件中的标签通过具有以下代码的绑定源将文本属性绑定到数据集中的数据:

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

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

我可以想到不同的方法,但不优雅:-捕获标签的文本更新事件并撤消更改...-将日期作为字符串存储在数据库中...-手动填充标签。 .. -...

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

拜托,我在绑定中缺少任何魔法,以便它不会假设它必须更改时区?

非常感谢您!亚当

4

1 回答 1

0

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

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

总之非常感谢!

于 2012-06-25T10:39:53.697 回答