【问题标题】:How do you manually modify a bound object with a FormView?如何使用 FormView 手动修改绑定对象?
【发布时间】:2012-02-04 10:21:28
【问题描述】:

我正在使用带有 ObjectDataSource 的 FormView。单击保存按钮时,我想在将数据绑定对象设置为 ObjectDataSources 更新方法之前对其进行修改。

我尝试了 FormView 的更新事件以及对象数据源的更新事件,但我不知道如何访问数据绑定对象。 FormView.DataItem 在这些事件中为空。

或者换句话说,我想在 DataItem 被传递给 ObjectDataSource UpdateMethod 之前对其进行拦截和修改。

为了更详细地说明我为什么要这样做,表单上有一些值不能与内置功能进行数据绑定。其中一个控件是复选框列表。我正在使用 DataBinding 事件来填充检查,但现在我还需要一种方法来更新我的对象以反映表单值。还有其他类似情况的控件。

【问题讨论】:

标签: c# asp.net asp.net-2.0


【解决方案1】:

我知道这是一个老问题,但我遇到了同样的问题,并找到了我认为 Bob 正在寻找的答案。

解决方案是在 Web 窗体上使用 ObjectDataSource 更新事件。更新事件包括 ObjectDataSourceMethodEventArgs 对象作为参数。 ObjectDataSourceMethodEventArgs 类包含一个名为“InputParameters”的属性,您可以使用它来访问数据对象并在更新发生之前修改内容。您需要先将 InputParameters 对象转换为 OrderedDictionary 类型(完整命名空间为 System.Collections.Specialized.OrderedDictionary)

看起来像这样:

protected void myObjectDataSource_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
    OrderedDictionary parameters = (OrderedDictionary)e.InputParameters;
    MyDataObject updatedData = (MyDataObject)parameters[0];
    DropDownList myDropDown = (DropDownList)FormView1.FindControl("myDropDown")
    updatedData.SomeDataValue = myDropDown.SelectedValue;
}

【讨论】:

    【解决方案2】:

    您为什么不编写自己的业务对象(也称为 ObjectDataSource),然后包装原始的 ObjectDataSource 对象?然后,您可以拦截任何您想要的内容,并将其修改为原始 ObjectDataSource 对象的 Save 方法。

    【讨论】:

    • 有这样的例子吗?我不确定这是我想要完成的目标
    【解决方案3】:

    DataItem 仅在 DataBinding 时可用。
    然后将数据绑定到 FormView 中的控件。
    在更新之前使用 myFormView.FindControl(string id) 访问绑定值。

    如果双向数据绑定不适合您,您应该实例化您的对象,手动填充属性,然后更新或提交更改。

    【讨论】:

      【解决方案4】:

      由于您处于更新事件中,因此 FormView.DataItem 为空,因为尚未发生数据绑定。您必须通过包含您感兴趣的数据的表单控件来访问数据。

      尝试在相关控件的 OnDataBinding 事件期间应用您的数据修改。

      【讨论】:

      • 我不想访问正在发布的数据,我想访问将发送到 ObjectDataSource 的 Update 方法的实际对象,以便我可以在其上设置一些字段。跨度>
      • 到那时,为时已晚。您必须在数据绑定发生之前捕获它。除非您想在事后从数据库或业务对象中读回它,否则请执行您的修改,然后将其写回。
      猜你喜欢
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多