代码之家  ›  专栏  ›  技术社区  ›  Scott Ferguson

如何使用objectdatasource对datetime字段执行双向数据绑定

  •  1
  • Scott Ferguson  · 技术社区  · 15 年前

    我有一个asp.net 3.5页面,它包含一个formview控件,使用objectdatasource绑定到一个业务对象。

    业务对象的属性之一是DateTime类型,我要对此对象执行双向数据绑定,包括DateTime属性。

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

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

    它表现得很好。 问题是当我试图执行更新时。我得到以下异常:

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

    我的objectdatasource包含此属性的显式set updateparameter,但似乎没有任何区别。

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

    我做错什么了?

    更新:

    如果我将绑定表达式中的格式字符串更改为

    {0:d MMM yyyy HH:mm}
    

    (注意 HH 以及 毫米 )

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

    谢谢。

    2 回复  |  直到 13 年前
        1
  •  1
  •   patmortech    15 年前

    可以重写formview控件的itemUpdating事件,然后修改该参数的值以确保其格式正确。这很可能意味着:

    1. 从e.newvalues(“date”)获取值
    2. 将字符串值解析为DateTime对象
    3. 将值重新分配给e.newvalues(“日期”)

    在过去,我不得不在货币字段中做类似的事情,人们可能会在其中输入一个美元符号,如果不加处理会导致错误。

        2
  •  1
  •   Muhammad Akhtar    13 年前

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

    在您的方案中,您必须在formview中修改日期 databound 事件,而不是在绑定属性中设置日期格式。

    这样在更新字段时就不会出错。