如何使用FormView手动修改绑定对象?

时间:2009-07-31 18:31:16

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

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

我尝试了FormView的Updating事件以及Object Data Source的Updating事件,但我无法弄清楚如何访问数据绑定对象。 FormView.DataItem在这些事件中为空。

或者换句话说,我想在将DataItem传递给ObjectDataSource UpdateMethod之前拦截并修改它。

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

4 个答案:

答案 0 :(得分:4)

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

解决方案是在Web窗体上使用ObjectDataSource Updating事件。 Updating事件包括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;
}

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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