如何使用ObjectDataSource对DateTime字段进行双向数据绑定

时间:2009-08-01 00:02:11

标签: asp.net data-binding formview

我有一个ASP.Net 3.5页面,其中包含一个FormView控件,使用ObjectDataSource绑定到业务对象。

业务对象的一个​​属性是DateTime类型,我想为这个对象做2路数据绑定,包括DateTime属性。

我使用自定义格式显示DateTime属性,如下所示:

<asp:TextBox ID="TextBoxDate" runat="server" Text='<%# Bind("Date", "{0:d MMM yyyy HHmm}") %>' />

它显示得很好。 问题是当我尝试执行更新时。我得到以下异常:

  

字符串未被识别为有效的DateTime。

我的ObjectDataSource包含为此属性显式设置的UpdateParameter,但它似乎没有任何区别。

    <UpdateParameters>
        <asp:Parameter Name="Date" Type="DateTime" />
    </UpdateParameters>

我做错了什么?

更新:

事实证明,如果我将我的Bind表达式中的格式字符串更改为

{0:d MMM yyyy HH:mm}

(注意 HH mm 之间的冒号)

...然后双向数据绑定按预期工作。可悲的是,这并不是我想要的。我希望使用没有冒号的24小时时钟,因此我的原始格式字符串。这仍然无效,我很想知道为什么?更好的是,我很想知道如何在框架中解决这个缺点,但仍然会进行声明性数据绑定。

感谢。

2 个答案:

答案 0 :(得分:1)

Bind()方法,实际上提供双向数据绑定,Eval提供单向数据绑定

在您的方案中,当您向用户显示数据而不是在bind属性中设置日期格式时,您必须在formview databound事件中修改日期。

通过这种方式,更新字段时不会出现错误。

答案 1 :(得分:1)

您可以覆盖FormView控件的ItemUpdating事件,然后修改该参数的值以确保它的格式正确。这很可能意味着:

  1. 从e.NewValues(“日期”)
  2. 获取值
  3. 将字符串值解析为DateTime对象
  4. 将值分配回e.NewValues(“日期”)
  5. 过去我必须做一些这样的事情,货币领域人们可能会输入美元符号,如果不加考虑会导致错误。