【问题标题】:How do I do 2 way databinding for DateTime fields using ObjectDataSource如何使用 ObjectDataSource 对 DateTime 字段进行 2 路数据绑定
【发布时间】:2009-08-01 00:02:10
【问题描述】:

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

业务对象的属性之一是 DateTime 类型,我想为此对象进行 2 路数据绑定,包括 DateTime 属性。

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

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

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

字符串未被识别为有效的日期时间。

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

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

我做错了什么?

更新:

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

{0:d MMM yyyy HH:mm}

(注意HHmm之间的冒号)

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

谢谢。

【问题讨论】:

  • Scott:你检查我的答案并申请了吗?

标签: asp.net data-binding formview


【解决方案1】:

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

  1. 从 e.NewValues("Date") 获取值
  2. 将字符串值解析为 DateTime 对象
  3. 将值分配回 e.NewValues("Date")

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

【讨论】:

    【解决方案2】:

    Bind()方法,实际上提供了两种数据绑定,Eval提供了一种数据绑定

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

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

    【讨论】:

    • Muhammad,您是否暗示我无法使用此 Bind 表达式进行声明性绑定: 相反,我应该在 DataBound 事件的代码中设置我的格式?我赞成您的回答,因为它很有帮助,但我真的希望我能够进行声明性绑定,而不必在 DataBound 事件上编写代码......
    • 您正在尝试的是,您正在将格式设置为日期时间,当它显示时就可以了,但是当发送相同格式的参数进行更新时,就会产生问题。
    • 问题可以通过 2 种方式解决,一种是我在回答中提到的,在您显示时将其更改为数据绑定,另一种是在 formview 更新事件中以重新格式化的形状发送此参数。
    • 所以我认为第一个更好,我们主要使用第一个
    猜你喜欢
    • 2021-08-18
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多